我是靠谱客的博主 拉长龙猫,最近开发中收集的这篇文章主要介绍大数据基础之Spark——Spark基础(Spark优势、Spark技术栈、Spark架构、Spark入口以及RDD相关操作),觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
Spark的安装教程和启动方式在我之前的博客里写过,有需要的可以去看看。
目录
- Spark的安装教程和启动方式在我之前的博客里写过,有需要的可以去看看。
- Spark简介:
- 使用Spark的原因:
- 相比于MapReduce:
- Spark是类Hadoop MapReduce的通用并行框架
- Spark优势:
- Spark技术栈
- spark架构设计及原理:
- 运行架构:
- 详细运行过程:
- Spark架构核心组件:
- Spark API
- SparkContext
- SparkSession
- RDD
- RDD与DAG
- RDD的创建方法:
Spark简介:
Spark是一种用来实现分布式计算的框架。
使用Spark的原因:
相比于MapReduce:
- 处理过程繁杂
- 只有Map和Reduce两个操作,复杂的逻辑需要大量的样板代码 - 处理效率低
- Map中间结果写磁盘,Reduce结果写HDFS,多个Map通过HDFS交换数据
- 任务调度与启动开销大 - 不适合迭代处理、交互式处理和流式处理
Spark是类Hadoop MapReduce的通用并行框架
- Job中间的输出结果可以保存在内存中,不需要落盘和HDFS读写
- 比MapReduce平均快10倍 (官网解释在特定环境下快100倍)
Spark优势:
- 处理速度快
- 基于内存数据处理,比MR快100个数量级以上 (逻辑回归算法测试)
- 基于硬盘数据处理,比MR快10个数量级以上 - 易用性
- 支持Java、Scala、Python、R语言
- 交互式shell方便开发测试 - 通用性
- 一栈式解决方案:批处理、交互式查询、实时流处理、图计算及机器学习 - 多种运行模式
- Yarn、Mesos、EC2、Kubernetes、Standalone、Local(中间三个在国内用的很少)
Spark技术栈
- Spark Core
- 核心组件,分布式计算引擎
- Spark SQL
- 高性能的基于Hadoop的SQL解决方案
- Spark Streaming
- 可以实现高吞吐量、具备容错机制的实时流处理
- Spark Graphx
- 分布式图处理框架
- Spark Mllib
- 构建在Spark上的分布式机器学习库
spark架构设计及原理:
运行架构:
- 在驱动程序中,通过SparkContext主导应用的执行
- SparkContext可以连接不同类型的Cluster Manager(Standalone、Yarn、Mesos),连接后,获得集群节点上的Exector
- 一个Worker节点默认一个Exector,通过SPARK_WORKER_INSTANCES调整
- 每个应用获取自己的Exector
- 每个Task处理一个RDD分区
详细运行过程:
- SparkContext向资源管理器注册并申请资源
- SparkContext向资源管理器申请运行Exector
- 资源管理器向Exector获取资源并返回给SparkContext
- Exector向SparkCOntext注册并申请Task
- SparkContext构建DAG图并分解成stage
- SparkContext将stage发送给TaskScheduler(任务监视器)
- TaskScheduler将Task任务和资源发放给Exector执行
- 执行完毕释放所有资源
Spark架构核心组件:
术语 | 说明 |
---|---|
Application | 建立在Spark上的用户程序,包括Driver代码和运行在集群各节点Executor中的代码 |
Driver program | 驱动程序。Application中的main函数并创建SparkContext |
Cluster Manger | 在集群(Standalone、Mesos、YARN)上获取资源的外部服务 |
Worker Node | 集群中任何可以运行Application代码的节点 |
Exector | 某个Application运行在worker节点上的一个进程 |
Job | 包含多个Task组成的并行计算,往往由Spark Action触发生成,一个Application中往往会产生多个Job |
Stage | 每个Job会被拆分成多组Task,作为一个TaskSet,其名称为Stage |
Task | 被送到某个Executor上的工作单元 |
Spark API
SparkContext
- 连接Driver与Spark Cluster(Workers)
- Spark的主入口
- 每个JVM仅能有一个活跃的SparkContext
- SparkContext.getOrCreate
创建方法:
val conf = new SparkConf().setMaster("local[*]").setAppName("mytest")
val sc = SparkContext.getOrCreate(conf)
//Master为本地模式,方括号里的为计算机核数
//appName为自定义的
SparkSession
- Spark 2.0+应用程序的主入口:包含了SparkContext、SQLContext、HiveContext以及StreamingContext
- SparkSession.getOrCreate
创建方法:
val spark = SparkSession.builder.master("local[*]").appName("mytest").getOrCreate()
RDD
- RDD的概念 (弹性分布式数据集)
- 分布式(Distributed)
- 数据的计算并非只局限于单个节点,而是多个节点之间协同计算得到
- 数据集 (DataSets)
- RDD是只读的,分区记录的集合,每个分区分布在集群的不同节点上
- RDD并不存储真正的数据,只是对数据和操作的描述 - DataFrame
- 弹性 (Resilient)
- 自动进行存储方式的切换,RDD优先存储在内存中,内存不足将自动写入磁盘
- 基于Linage的高效容错机制,在任何时候都能进行重算,根据数据血统,可以自动从节点失败中恢复分区,各个分片之间的数据互不影响
- Stage失败自动重试 / Task失败自动重试
- Checkpoint和Persist,checkpoint持久化到文件系统 - RDD的五大特征
- RDD由很多的分区构成,每个分区都有一个Task
- 每个分区上都有compute函数,计算该分区中的数据
- RDD之间都有一定的依赖
- 分区器决定数据分配至哪个分区
- 优先位置列表,将计算任务分派到其所在数据块的存储位置 (移动数据不如移动计算)
RDD与DAG
- 两者都是Spark提供的核心抽象
- DAG (有向无环图)反映了RDD之间的依赖关系
RDD的创建方法:
//方法一:
val rdd = sc.parallelize(List(1,2,3,4,5))
val rdd = sc.parallelize(List(1,2,3,4,5),5) //设置分区数
//方法二:
valrdd = sc.makeRDD(List(1,2,3,4,5))
//读文件产生RDD
val rdd = sc.textFile("文件路径") //支持目录、压缩文件以及通配符(默认访问HDFS)
val rdd = sc.textFile("/mydata/*.txt或者/mydata/*.gz")
//创建pairRDD
//读文件创建pairRDD
val rdd = sc.wholeTextFiles("文件路径")
最后
以上就是拉长龙猫为你收集整理的大数据基础之Spark——Spark基础(Spark优势、Spark技术栈、Spark架构、Spark入口以及RDD相关操作)的全部内容,希望文章能够帮你解决大数据基础之Spark——Spark基础(Spark优势、Spark技术栈、Spark架构、Spark入口以及RDD相关操作)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复