Spark作业运行流程

Spark有3种运行模式,包括Standalone,YARN和Mesos,其中,Mesos和YARN模式类似。目前用得比较多的是Standalone模式和YARN模式

  • Standalone运行模式

Standalone模式是Spark实现的资源调度框架,其主要的节点有Client节点、Master节点和Worker节点。Driver既可以运行在Master节点上,也可以运行在本地Client端。当用spark-shell交互式工具提交spark的Job时,Driver在Master节点上运行。当使用spark-submit工具提交Job或者在Eclipse、IDEA等开发平台上使用“new SparkConf().setMaster(spark://master:7077)"方式运行Spark任务时,Driver是运行在本地Client端上的。

当用spark-shell交互式工具提交Spark的Job时,使用spark-shell启动脚本。该脚本启动一个交互式的Scala命令界面,可供用户来运行Spark相关命令。在Spark的安装目录下启动spark-shell,启动命令如下所示:

在spark-shell的启动过程中可以看到如下的信息,从中可以看到Spark的版本为2.1.0,spark内嵌的Scala版本为2.11.8,Java的版本为1.8.同时spark-shell在启动的过程中会初始化SparkContext为sc,以及初始化SQLContext为sqlContext。界面出现”scala>"这样的提示符,说明Spark交互式命令窗口启动成功,如图所示。用户可在该窗口下编写Spark相关代码,

spark-shell启动的时候也可以手动指定每个节点的内存和Executor使用的cpu个数,启动命令如下所示:

 

当以Standalone模式向spark集群提交作业时,作业的运行流程如下图所示:

(1)首先,SparkContext连接到Master,向Master注册并申请资源。

(2)Worker定期发送心跳信息给Master并报告Executor状态。

扫描二维码关注公众号,回复: 10079295 查看本文章

(3)Master根据SparkContext的资源申请要求和Worker心跳周期内报告的信息决定在哪个Worker上分配资源,然后在该Worker上获取资源,启动StandaloneExecutorBackend。

(4)StandaloneExecutorBackend向SparkContext注册。

(5)SparkContext将Application代码发送给StandaloneExecutorBackend,并且SparkContext解析Application代码,构建DAG图,并提交DAG Scheduler,分解成Stage(当碰到Action操作时),就会催生Job,每个Job中含有一个或多个Stage),然后分配到相应的Worker,最后提交给StandaloneExecutorBackend执行。

(6)StandaloneExecutorBackend会建立Executor线程池,开始执行Task,并向SparkContext报告,直至Task完成。

(7)所有Task完成后,SparkContext向Master注销,释放资源。

  •  YARN模式

YARN模式根据Driver在集群中的位置分为两种,一种是YARN-Client模式(客户端模式),另一种是YARN-Cluster模式(集群模式)。

在YARN模式中,不需要启动Spark独立集群,所以这个时候去访问http://master:8080是访问不了的。启动YARN客户端模式的Spark Shell命令如下所示:

在集群模式下,Driver运行在Application Master上,Application Master进程同时负责驱动Application和从YARN中申请资源。该进程运行在YARN Container内,所以启动Application Master的Client可以立即关闭,而不必持续到Application的声明周期。

作业流程如下所示:

 

(1)客户端生成作业信息提交给ResourceManager。

(2)ResourceManager在某一个NodeManager(由YARN决定)启动Container,并将Application Master 分配给该NodeManager。

(3)NodeManager接收到ResourceManager的分配,启动Application Master并初始化作业,此时NodeManager就称为Driver。

(4)Application向ResourceManager申请资源,ResourceManager分配资源的同时通知其他NodeManager启动相应的Executor。

(5)Executor向NodeManager上的Application Master注册汇报并完成相应的任务。

如下图是YARN客户端模式的作业运行流程。Application Master仅仅从YARN中申请资源给Executpr。之后Client会与Container通信进行作业调度

YARN模式的作业运行调度描述如下

(1)客户端生成作业信息提交给ResourceManager

(2)ResourceManager在本地NodeManager启动Container,并将Application Master分配给该NodeManager。

(3)NodeManager接收到ResourceManager的分配,启动Application Master并初始化作业,此时这个NodeManager就称为Driver。

(4)Application向ResourceManager申请资源,ResouceManager分配资源同时通知其他NodeManager启动相应的Executor。

(5)Executor向本地启动的Application Master注册汇报并完成相应的任务。

YARN-Cluster和YARN-Client区别

在YARN-Cluster模式下,SparkDriver运行在Application Master(AM)中,它负责向YARN申请资源,并监督作业的运行状况。当用户提交了作业之后,就可以关掉Client,作业会继续在YARN上运行,所以YARN-Cluster模式不适合运行交互类型的作业。然而在YARN-Client模式下,AM仅仅向YARN请求Executor,Client会与请求得到的Container通信来调度它们的工作,也就是是Client不能离开。

总结来说,集群模式的Spark Driver运行在AM中,而客户端模式的Spark Driver运行在客户端。所以,YARN-Cluster适用于生产,而YARN-Client适用于交互和调试,也就是希望快速地看到应用的输出信息。

发布了85 篇原创文章 · 获赞 39 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_41338249/article/details/91411095
今日推荐