spark
可以部署在Yarn之上的 内存计算框架
可以满足批处理 Spark,实时交互查询 spark SQL,流处理Spark streaming,图计算 GraphX,机器学习 MLlib
spark与其他框架对比:
其他框架 互相通信存在结构不同的问题,但是Spark都集中在一起,不同框架间可以通信
spark 生态系统
Mesos/hadoop Yarn 资源调度
tachyon/HDFS/S3 分布式文件系统
spark Core 内存计算框架
Spark Streaming 流处理框架
BlinkDB/Spark SQL 完成实时交互查询
GraphX 图计算框架
MLBase/MLlib 完成机器学习,数据挖掘
spark 运行原理
- RDD resillient Distributed Dataset 弹性分布式数据集 分布式内存的抽象概念,共享内存模型
- DAG directed Acyclic Graph 有向无环图 反映不同RDD间的依赖关系
- Executor
运行在工作节点的一个进程,负责运行task - Application
spark程序,包含1个driver&多个Job - Job
包含多个RDD及作用于相应RDD的各种操作 - Stage
Job的基本调度单位,Job分为多组Task,每组Task为一个Stage/TaskSet, 关联的,没有shuffle依赖关系的任务集运行框架
spark的资源管理器与其本身的调用无关,只需进行交流即可,故而可以使用其他资源管理器(eg.Yarn)
-
运行流程
-
driver会创建一个sparkContext,与资源管理器沟通申请资源
-
资源申请后,sparkContext会将资源进行分配,每个workNode上会创建Executor进程,汇报资源使用情况
-
sparkContext会将用户的应用程序进行任务拆解并发给Executor执行
其中任务拆解过程:
-
执行结束,Executor会将结果返回给sparkContext或者写入本地文件
-
sparkContext申请注销资源与本身
-
-
RDD惰性调用过程
只有最后会做Action,之前只做Transformation(map,filter,groupby,join等粗粒度转换)
DAG拓扑结果
优点:
- 与传统的map reduce过程通过写回磁盘的方式进行数据交换,,RDD之间直接通过管道进行数据交流,不需要保存中间结果;
- 高容错性,天然的容错性,当一个结果RDD出现问题,只需从上一级RDD再次转换出结果;
- 可以直接存储json对象,而且不需要读写磁盘,减少对象序列化反序列化过程。
-
RDD依赖关系
窄依赖:一个或多个父RDD -->一个子RDD
宽依赖:一个父RDD 对应 多个子RDD
如何划分stage
论文:http://people.csail.mit.edu/matei/papers/2012/nsdi_spark.pdf
-
stage
shuffleMapStage:可有可无
输入:外界数据或者另一个shuffleMapStage的输出
输出:另一个stage的输入
resultStage :必有一个,最终的stage
输入:外界数据或者shuffleMapStage的输出
输出:无
spark streaming
基于spark的批处理特性和RDD机制,设计的流处理模式
设计思路
将输入数据 按时间片(秒) 分成一段段 DStream(Discretiaed Stream 离散化数据流),每一段数据转换为一个RDD,将Dstream的操作转换为RDD操作
缺点:不能支持毫秒级别的数据处理
优点:
- 基于RDD机制的高容错性
- 基于spark的批处理&spark streaming 实时计算,所以适合 历史数据与实时数据联合分析的场景