临近年关将spark近来所学整理一下,若有不足请指正。
一、什么是Spark?
Spark是由加州大学伯克利分校AMP实验室开源的分布式大规模数据处理通用引擎,具有高吞吐,低延时,通用易扩展,高容错等特点。
Spark内部提供了丰富的开发库、提供了多种运行模式,Spark函数式编程语言在Scala中实现。
二、Spark的架构?
Spark架构示意图:
Spark各个核心组件介绍:
Client:客户端进程,负责提交作业。
Driver:一个spark作业有一个spark context,一个spark context对于一个driver进程。作业main函数运行在driver中。driver重要负责作业的解析,以及通过DAGScheduler划分stage,将stage转化成TaskSet提交给TaskScheduler任务调度器,进而调度Task到Executor上执行。
Executor:负责执行driver分发的task任务,集群中一个节点可以启动多个Executor,每一个Executor可以执行多个task任务。
cache:spark提供了对rdd不同级别的缓存策略,分别可以缓存到内存,磁盘,外部分布式内存存储系统Tachyon等。
Application:提交一个作业就是一个Application,一个Application只有一个spark context。
Job:rdd执行Action操作就会生成一个job。
Task:spark运行的基本单位,负责处理rdd计算逻辑。
Stage:DAGScheduler将job划分为多个stage,stage划分界限是shuffle的产生,shuffle标志着上一个stage的结束和下一个stage的开始。
TaskSet:划分的stage会转换成一组相关联的任务集。
RDD(Resilient Distributed Dataset):弹性分布式数据集,可以理解为一种只读分布式多分区的数组,spark计算操作都是基于rdd进行的。
DAG(Directed Acyclic Graph):有向无环图。spark实现了DAG计算模型,DAG计算模型指将一个计算任务按照规则分解为若干子任务,这些任务之间根据逻辑关系构建成有向无环图。
三、RDD介绍
缓存、依赖关系
(1)计算类型
在Spark中RDD提供Transformation和Action两种计算类型。Transformation操作非常丰富,采用延迟执行的方式,在逻辑上定义了RDD的依赖关系和计算逻辑,但并不会真正触发执行动作,只有等到Action操作才会真正触发执行操作。Action操作用于最终结果的输出。
从HDFS文件生成Spark RDD,经过map,join等多次Transformation操作,最终调用saveAsTextFile Action操作将结果集输出到HDFS并以文件形式保存。RDD的流转过程如下图: