Spark--从Spark组件来看Spark的执行流程

  上周在 宜人贷蜂巢 内部分享了 spark 、和 spark streaming 相关的主题,现在有些空闲时间,就整理了一下,放在博客上面。

  • 一篇博客描述不完整,即使讲完了也会显得很臃肿,所以会分为以下几篇博客来讲解:
  1. Spark – Spark 相关介绍(如下)
  2. Spark – 从Spark组件来看Spark的执行流程(如下)
  3. Spark – 从RDD的角度来看Spark内部原理
  4. Spark Streaming – 相关介绍
  5. Spark Streaming – 相关应用(这个之前的博客已经讲了)

Spark 相关介绍

  • 这个介绍就没有什么好讲的哈,即使读者自己没去研究过 spark,也多多少少有些了解了,毕竟很火嘛,直接发几张图片
  • Spark 一站式大数据处理平台
    Spark 一站式大数据处理平台(图片来源于网络)

  • Spark vs Hadoop

  1. 右箭头”→”就是表示,Hadoop 组件 与 Spark 组件的直观对比
  2. 双箭头,Yarn 与 Mesos 就是他们共存的,都可以使用yarn或者mesos作为调度器
  3. 虚线,Tachyon 主要用于Spark ,并且可以基于HDFS
  4. 至于常常讨论的 Spark 为什么比MapReduce快,主要是它们的计算模型很大不同,MapReduce落地磁盘比较多
    Spark vs Hadoop(图片来源:https://www.slideshare.net/SparkSummit/dev-ops-training)
  • Spark vs Flink
  1. Flink也是后起之秀哈,势头猛的很,还有阿里的Blink在支撑,感觉流行起来是迟早的事情
  2. 流计算这些 Flink 是要强一点,真正的流计算。不过前段时间的Spark Summit 2017大会也是说spark 2.2后重点会是流计算与深度学习
  3. Spark SQL或者Hive on Spark 相对与 Flink 也是有优势
  4. 总的来说与 Flink 里面的东西差不多,如果对 Spark 深入了解后对 Flink 的应用也是简单事情。

从Spark组件来看Spark的执行流程

Spark架构分布

  • 下面来看看spark各个节点的分布图,如下
    spark各个节点的分布图

  • Spark采用的是Master-Slave模型,从上面可以看出分为四个部分,Client、Driver、ClusterManager、Worker

  1. client:客户端进程,负责提交job到master
  2. Driver:运行Application,主要是做一些job的初始化工作,包括job的解析,DAG的构建和划分并提交和监控task
  3. Cluster Manager:在standalone模式中即为Master主节点,控制整个集群,监控worker,在YARN模式中为资源管理器ResourceManager
  4. Worker:负责管理本节点的资源,定期向Master汇报心跳,接收Master的命令,启动Driver。Executor,即真正执行作业的地方,一个Executor可以执行一到多个Task

Spark执行流程

再把图细画一下
spark执行流程图,ps:不清楚可以点击放大了看

  1. 通过SparkSubmit提交job后Client就开始构建 spark context,即 application 的运行环境(使用本地的Client类的main函数来创建spark context并初始化它)
  2. yarn client提交任务,Driver在客户端本地运行yarn cluster提交任务的时候,Driver是运行在集群上
  3. SparkContext连接到ClusterManager(Master),向资源管理器注册并申请运行Executor的资源(内核和内存)
  4. **Master**根据SparkContext提出的申请,根据worker的心跳报告,来决定到底在那个worker上启动executor
  5. Worker节点收到请求后会启动executor
  6. executor向SparkContext注册,这样driver就知道哪些executor运行该应用
  7. SparkContext将Application代码发送给executor(如果是standalone模式就是StandaloneExecutorBackend)
  8. 同时SparkContext解析Application代码构建DAG图,提交给DAGScheduler进行分解成stage,stage被发送到TaskScheduler
  9. TaskScheduler负责将Task分配到相应的worker上,最后提交给executor执行
  10. executor会建立Executor线程池开始执行Task,并向SparkContext汇报,直到所有的task执行完成
  11. 所有Task完成后,SparkContext向Master注销
  • 参考资料
  1. http://www.jianshu.com/p/612ad0898fe2
  2. http://www.cnblogs.com/shishanyuan/archive/2015/08/19/4721326.html
  3. http://blog.csdn.net/do_what_you_can_do/article/details/53128480

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器