二.spark学习出体验 之spark作业的运行原理(纯属个人理解)

本文介绍了Spark在standalone模式下的运行流程,从启动集群到任务提交的细节。首先,通过start-all.sh启动master和worker,worker向master注册并保持心跳。接着,使用spark-submit提交任务,driver申请资源并注册application。master向worker分配executor,executor反向注册到driver。TaskScheduler将taskset分发给executor,executor反序列化task并在线程池中执行。
摘要由CSDN通过智能技术生成

        哈喽,我的第二篇文章来啦,由于我提前已经整理过自己的笔记了尴尬所以这篇文章出来的有点快,哈哈哈。莫要介意~

        言归正传,一个spark程序我运行必然离不开spark集群(当然spark也可以运行在yarn集群中,我在这篇文章中先介绍spark standalone的方式),在这里我默认读者的spark集群已经搭建成功,在以后的博客中,我也会对spark集群的搭建进行详细描述的。

           1.首先启动spark集群,通过spark集群中的start-all.sh的脚本去启动我们的集群,在集群启动成功之后,会启动一个个对应的master和worker。

            2.当worker启动完成之后,会向我们的master进行注册,并且不断的向master发送心跳包,去监听主节点事否存在,并维持与master的通信。(在这里我们可以看出,master与worker都是一个基于AKKA Actor的事件驱动模型)

            3.当我们的集群启动成功之后,变可以接收我们提交的spark任务啦~我们通过spark-submit.sh向spark集群提交我们的任务,在这个脚本中,我们对启动任务所需要的几个参数,如下图所示。

        

其中class是我们spark任务的application所在类的类名,其他的参数我相信大家看字面的意思应该就能明白了,其中有关hive的两个参数大家可以暂时忽略,因为这个图是我从自己的测试机中复制出来的,涉及到了hive部分的内容。(其实这个过程就是我们的driver向master申请我们spark任务所需要的资源,driver会向master发送一个registerApplication的case class)

            4.当master接收到这个case class之后,会向我们的worker发送对应的指令,去在worker中去启动对应的executor进程(这个executor进程其实只是CoraseGaineExecutorBackend进程的一个句柄),当executor启动成功之后,会向master汇报启动成功,并且executor会向driver进行反向注册(其实这个反向注册是向SparkContext阶段初始化的SchedulerBackend守护线程进行注册的),这样在spark集群中,就有了一批独立的executor为driver服务,而之后spark任务的就会直接去分发给对应的executor,而不需要通过master。

            5.然后TaskScheduler会把taskset(DAGScheduler根据spark作业的逻辑将spark作业划分为若干个stage,然后为每一个stage构建一批taskset)发送给对应的executor。(实际上是由SchedulerBackend进行分发的,并且将taskset分发给executor的过程,也是有规则在里边的,这里有两种不同的方法,一种是FIFO,一种是fair,在以后我文章中我会进行讲解的)。

             6.当executor接收到发送过来的taskset之后,会将其进行反序列化,然后将这些task封装到一个taskrunner的线程中,然后将其放在本地线程池中去执行。

            至此,一个spark任务的提交过程就结束了。我前期的这几篇文章基本都会涉及到大量的文字描述,因为我想把我的理解描述出来告诉读者,希望大家能够耐心的读下去,后期我会为大家补上几张图的~~


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值