Spark--从Spark组件来看Spark的执行流程
上周在 宜人蜂巢 内部分享了 spark
、和 spark streaming
相关的主题,现在有些空闲时间,就整理了一下,放在博客上面。
- 一篇博客描述不完整,即使讲完了也会显得很臃肿,所以会分为以下几篇博客来讲解:
- Spark – Spark 相关介绍(如下)
- Spark – 从Spark组件来看Spark的执行流程(如下)
- Spark – 从RDD的角度来看Spark内部原理
- Spark Streaming – 相关介绍
- Spark Streaming – 相关应用(这个之前的博客已经讲了)
Spark 相关介绍
- 这个介绍就没有什么好讲的哈,即使读者自己没去研究过 spark,也多多少少有些了解了,毕竟很火嘛,直接发几张图片
Spark 一站式大数据处理平台
Spark vs Hadoop
- 右箭头”→”就是表示,Hadoop 组件 与 Spark 组件的直观对比
- 双箭头,Yarn 与 Mesos 就是他们共存的,都可以使用yarn或者mesos作为调度器
- 虚线,Tachyon 主要用于Spark ,并且可以基于HDFS
- 至于常常讨论的 Spark 为什么比MapReduce快,主要是它们的计算模型很大不同,MapReduce落地磁盘比较多
- Spark vs Flink
Flink
也是后起之秀哈,势头猛的很,还有阿里的Blink在支撑,感觉流行起来是迟早的事情流计算
这些 Flink 是要强一点,真正的流计算。不过前段时间的Spark Summit 2017
大会也是说spark 2.2后重点会是流计算与深度学习Spark SQL
或者Hive on Spark
相对与 Flink 也是有优势- 总的来说与 Flink 里面的东西差不多,如果对 Spark 深入了解后对 Flink 的应用也是简单事情。
从Spark组件来看Spark的执行流程
Spark架构分布
下面来看看
spark各个节点的分布图
,如下Spark采用的是Master-Slave模型,从上面可以看出分为四个部分,Client、Driver、ClusterManager、Worker
client
:客户端进程,负责提交job到masterDriver
:运行Application,主要是做一些job的初始化工作,包括job的解析,DAG的构建和划分并提交和监控taskCluster Manager
:在standalone模式中即为Master主节点,控制整个集群,监控worker,在YARN模式中为资源管理器ResourceManagerWorker
:负责管理本节点的资源,定期向Master汇报心跳,接收Master的命令,启动Driver。Executor
,即真正执行作业的地方,一个Executor可以执行一到多个Task
Spark执行流程
再把图细画一下
- 通过
SparkSubmit提交job后
,Client就开始构建
spark context,即 application 的运行环境(使用本地的Client类的main函数来创建spark context并初始化它) - yarn client提交任务,
Driver在客户端本地运行
;yarn cluster提交任务的时候,Driver是运行在集群上
- SparkContext连接到
ClusterManager(Master)
,向资源管理器注册并申请运行Executor的资源(内核和内存) **Master**根据SparkContext提出的申请
,根据worker的心跳报告,来决定到底在那个worker上启动executor- Worker节点收到请求后会
启动executor
executor向SparkContext注册
,这样driver就知道哪些executor运行该应用- SparkContext
将Application代码发送给executor
(如果是standalone模式就是StandaloneExecutorBackend) 同时SparkContext解析Application代码
,构建DAG图,提交给DAGScheduler进行分解成stage,stage被发送到TaskScheduler。TaskScheduler负责将Task分配到相应的worker
上,最后提交给executor执行- executor会建立Executor线程池,
开始执行Task
,并向SparkContext汇报,直到所有的task执行完成 - 所有Task完成后,
SparkContext向Master注销
- 参考资料