day26:Spark Runtime(Driver、Masster、Worker、Executor)内幕

来源:互联网 发布:学生怎么开淘宝网店 编辑:程序博客网 时间:2024/05/15 03:38

以下内容整理来源于DT大数据梦工厂:新浪微博:www.weibo.com/ilovepains/

1、spark集群部署

2、job提交解密

3、job的生成和接受

4、Task的运行

5、再论shuffle

一、再度讨论spark集群

1、spark 部署来看五大核心对象:Master, work , Executor、Driver、 CoarseGrainedExecutorbackend

2、spark 在分布式集群设计的时候:最大化功能独立,模块化强内聚松耦合

3、当Driver中的sparkContext初始化的时候会提交程序给Master,Master如果接受该程序在spark中运行的话,就会为当前的程序分配ApplD,

同时会分配具体的计算资源,需要特别注意的是:Master 是根据当前程序提交的配置信息来给集群中的Worker发指令分配具体的计算资源,但是Master发出指令后并不关心

具体的资源是否已经分配,转来说Master发指令就是记录了分配的资源,以后客户端在此提交其他的程序的会就不能使用该资源。其弊端是可能会导致其他要提交的程序无法分配到本来应该可以分配到的计算资源;最终的优势在于spark分布式系统功能弱耦合的基础上最快的运行系统(否则如果master要等待资源最终分配成功后才通知Driver的话会造成Driver阻塞,不能最大化并行计算资源的使用率)

需要补充说明的是:spark在默认情况下由于集权中一般都有一个Application在运行,所有Master分配资源策略的弊端就没有那么明显了。

二:Job提交过程源码揭秘:

1、通过在spakr-shell 运行一个job来了解job提交的过程,然后在通过源码验证


2、在spark中所有的Action都会触发一个至少一个job,上诉代码是通过saveAsTextFile来触发job的。

3、sparkContext在实例化会构造SparkDeploySchedulerBackend、DAGScheduler、TaskScheduleImpl等对象,其中SparkDeploySchedulerBacked负责集群计算资源的管理和调度,DAGScheduler负责高层调度(例如job中stage的划分,数据本地性等内存),TaskShcedulerImpl负责具体Stage的内部底层调度(例如具体每个Task的调度,Task的容错),mapoutTrackerMaster负责shuffle

4、 JobTaskSheduler内部调度

三、Task运行

1、Task 是运行在Executor中,而Executor位于CoarseGrainedExecutorBackend中的,且CoarseGrainedExecutorBackend 和Executor是一一对应的。

2、当CoarseGrainedExecutorBackend 接收到TaskSetManager发过来的LunchTask消息后会反序列化TaskDescription,实现Java Runnable,封装任务。


补充说明:LaunchTask是case class,因为每个消息状态不一样,case object是唯一的。

case LaunchTask(data) =>
      if (executor == null) {
        logError("Received LaunchTask command but executor was null")
        System.exit(1)
      } else {
        val taskDesc = ser.deserialize[TaskDescription](data.value)
        logInfo("Got assigned task " + taskDesc.taskId)
        executor.launchTask(this, taskId = taskDesc.taskId, attemptNumber = taskDesc.attemptNumber,
          taskDesc.name, taskDesc.serializedTask)
      }


作业:

job的提交和执行过程熟悉

涉及源码: DAGScheduler、 Executor、CoarseGrainedExecutorBackend

















DT大数据梦工厂

新浪微博:www.weibo.com/ilovepains/

微信公众号:DT_Spark

博客:http://.blog.sina.com.cn/ilovepains

TEL:18610086859

Email:18610086859@vip.126.com


0 0
原创粉丝点击