本課主題

  • Spark Executor 工作原理图
  • ExecutorBackend 注册源码鉴赏和 Executor 实例化内幕
  • Executor 具体是如何工作的

[引言部份:你希望读者看完这篇博客后有那些启发、学到什么样的知识点]

更新中......

Spark Executor 工作原理图

  • 第一步:Master 发指令给 Worker 启动 Executor;
  • 第二步:Worker 接收到 Master 发送过来的指令通过 EcecutorRunner 远程启动另外一个线程来运行 Executor;
  • 第三步:通过发送 RegisterExecutor 向 Driver 注册 Executor,这个时侯Worker 会启动另外一个进程来向 Driver 发送注册的信息,思考题:为什么要多开一个新进程而不在原有的 Worker 进程里发送信息给 Driver 呢?因为Worker 主要是管理当前机器上的资源的,而当前机器上的资源有变动的时候需要汇报给 Master,Worker 不是用来计算的,所以不可以在 Worker 里做计算;而且,在 Spark 中可能有很多不同的的应用程序,有很多应用程序你就需要有很多 Executor,如果你不是为每个 Executor 启动一个进程的话,这会导致当一个程序崩溃时,其他程序也会崩溃。

    需要特别注意的是在 CoarseGrainedExecutorBackend 启动时向 Driver 注册 Executor 其实质上是注册 ExecutorBackend 实例,和 Executor 实例之间没有直接关系! CoarseGrainedExecutorBackend 是 Executor 运行所在的进程名称,Executor 才是真正处理 Task 的对象Executor 内部是通过线程池的方式来完成 Task 的计算的,CoarseGrainedExecutorBackend 和 Executor 是一对一的关系


    CoarseGrainedExecutorBackend 是一个消息通信体(其实现了 (ThreadSafeRpcEndPoint) ,可以发送信息给 Driver 并可以接受 Driver 中发过来的指令,例如启动 Task 等。
  • 第四步:在 DriverEndpoint 中会接受到 RegisterExecutor 信息并完成在 Driver 上的注册,其实际是注册给 CoarseGrainedSchedulerBackend



    在 Driver 进程中有两个至关重要的 Endpoint: (注册的内幕源码可以参考第28课:Spark天堂之门解密)
    1) ClientEndpoint: 主要负责向 Master 注册当前的程序,是 AppClient 的内部成员;

    2) DriverEndpoint: 这是整个程序运行时候的驱动器,是CoraseGraninedSchedulerBackend 的内部成员。
  • 在 Driver 中通过 ExecutorData 封装并注册 ExecutorBackend 的信息到 Driver 的内存数据结构 executorMapData 中:
  • 实际在执行的时候DriverEndpoint 会把信息写下CoarseGraninedSchedulerBackend 的内存数据结构executorMapData 中,所以说最终是注册给了CoarseGraninedSchedulerBackend,也就是说CoarseGraninedSchedulerBackend 掌握了为当前程序分配的所有的ExecutorBackend 进程,而每一个ExecutorBackend 进程实例中会通过Executor对象来负责具体Task 的运行。
  • 在运行的时候使用 synchronised 关键字来保证 executorMapData 安全的并发写操作。

ExecutorBackend 注册源码鉴赏和 Executor 实例化内幕

  1. CoarseGrainedExecutorBackend 收到 DriverEndpoint (CoraseGrainedSchedulerBackend) 发送过来的 RegisteredExecutor 消息后会启动 Executor 实例对象,而 Executor 实例对象是事实上负责真正的 Task 的计算的;


  2. Executor在实例化的时候会实例化一个线程池来准备 Task 的计算的。

Executor 具体是如何工作的

  1. 当 Driver 发送过来 Task 的时候,其实是发送给了 CoarseGrainedExecutorBackend 这个 RpcEndpoint ,而不是直接发送给了 Executor (Executor 由于不是消息循环体,所以永远也无法直接接受远程发过来的信息);
  2. ExecutorBackend 在收到 Driver 中发送过来的消息后会通过调用 LaunchTask 来交给 Executor 去执行:

  3. 创建的 threadPool 中以多线程并发执行和线程复用的方式来高效的执行 Spark 发过来的 Task,接收到 Task 执行的命令后,会首先把 Task 封装在 TaskRunner 里面,TaskRunner 其实是 Java 中的 Runnerable 接口的具体的实现,在真正工作的时候会交给线程池中的线池去运行,此时会调用 run 方法来执行 task,TaskRunner 在调用 run 方法的时候会调用 Task run方法,而 Task 的 run 方法会调用 runTask, 而实际 Task 有 ShuffleMapTask 和 ResultTask;

[总结部份]

更新中......

参考资料

资料来源来至 DT大数据梦工厂 大数据传奇行动 第33课:Spark Executor内幕彻底解密:Executor工作原理图、ExecutorBackend注册源码解密、Executor实例化内幕、Executor具体工作内幕

Spark源码图片取自于 Spark 1.6.0版本

[Spark内核] 第33课:Spark Executor内幕彻底解密:Executor工作原理图、ExecutorBackend注册源码解密、Executor实例化内幕、Executor具体工作内幕的更多相关文章

  1. Spark Executor内幕彻底解密:Executor工作原理图、ExecutorBackend注册源码解密、Executor实例化内幕、Executor具体工作内幕

    本课主题 Spark Executor 工作原理图 ExecutorBackend 注册源码鉴赏和 Executor 实例化内幕 Executor 具体是如何工作的 Spark Executor 工作 ...

  2. [Spark内核] 第36课:TaskScheduler内幕天机解密:Spark shell案例运行日志详解、TaskScheduler和SchedulerBackend、FIFO与FAIR、Task运行时本地性算法详解等

    本課主題 通过 Spark-shell 窥探程序运行时的状况 TaskScheduler 与 SchedulerBackend 之间的关系 FIFO 与 FAIR 两种调度模式彻底解密 Task 数据 ...

  3. [Spark内核] 第37课:Task执行内幕与结果处理解密

    本课主题 Task执行内幕与结果处理解密 引言 这一章我们主要关心的是 Task 是怎样被计算的以及结果是怎么被处理的 了解 Task 是怎样被计算的以及结果是怎么被处理的 Task 执行原理流程图 ...

  4. [Spark内核] 第32课:Spark Worker原理和源码剖析解密:Worker工作流程图、Worker启动Driver源码解密、Worker启动Executor源码解密等

    本課主題 Spark Worker 原理 Worker 启动 Driver 源码鉴赏 Worker 启动 Executor 源码鉴赏 Worker 与 Master 的交互关系 [引言部份:你希望读者 ...

  5. Spark Streaming updateStateByKey案例实战和内幕源码解密

    本节课程主要分二个部分: 一.Spark Streaming updateStateByKey案例实战二.Spark Streaming updateStateByKey源码解密 第一部分: upda ...

  6. 基于HDFS的SparkStreaming案例实战和内幕源码解密

    一:Spark集群开发环境准备 启动HDFS,如下图所示: 通过web端查看节点正常启动,如下图所示: 2.启动Spark集群,如下图所示: 通过web端查看集群启动正常,如下图所示: 3.启动sta ...

  7. MyBatis 源码分析——SqlSession接口和Executor类

    mybatis框架在操作数据的时候,离不开SqlSession接口实例类的作用.可以说SqlSession接口实例是开发过程中打交道最多的一个类.即是DefaultSqlSession类.如果笔者记得 ...

  8. mybatis源码解析9---执行器Executor解析

    从前面分析我们知道了sql的具体执行是通过调用SqlSession接口的对应的方法去执行的,而SqlSession最终都是通过调用了自己的Executor对象的query和update去执行的.本文就 ...

  9. [Spark内核] 第31课:Spark资源调度分配内幕天机彻底解密:Driver在Cluster模式下的启动、两种不同的资源调度方式源码彻底解析、资源调度内幕总结

    本課主題 Master 资源调度的源码鉴赏 [引言部份:你希望读者看完这篇博客后有那些启发.学到什么样的知识点] 更新中...... 资源调度管理 任务调度与资源是通过 DAGScheduler.Ta ...

随机推荐

  1. 》》Jqurey html

    第1部分:jQuery HTML 1.获取内容和属性 -- 获取内容: text():设置或获取所选元素的文本内容 html():设置或获取所选元素的内容(包括HTML标记) val():设置或获取表 ...

  2. Android设计模式(九)--外观模式

    问题:在Android中,Apk能够有微信,QQ为代表的插件式安装更新功能: 那么问题来了,主系统(姑且这么说)调用插件式安装的子系统.由子系统提供对外的訪问.属不属于一种外观模式呢? 先说设计模式: ...

  3. hdu 4939

    题意: 长度为n个单位的map,每一个单位须要时间t来走完. 每一个单位能够放置一个塔.一共同拥有三种塔,每种塔的作用不同: 1.仅仅能攻击当前单位.每秒x点伤害(红塔) 2.攻击当前单位之后的全部单 ...

  4. 关于React组件之间如何优雅地传值的探讨

    闲话不多说,开篇撸代码,你可以会看到类似如下的结构: import React, { Component } from 'react'; // 父组件 class Parent extends Com ...

  5. 《程序设计方法》【PDF】下载

    内容简介 <程序设计方法>主要以方法为主导,结合C语言,把程序设计方法学研究中若干成熟的理论和方法用通俗易懂的语言描述出来.<程序设计方法>还选取趣味性强.技巧性高.能够启发学 ...

  6. myeclipse无法导入项目

    MyEclipse无法导入Java项目时常遇到的两种情况: 1.Some projects cannot be imported because they already exist in the w ...

  7. MySQL sql语句获取当前日期|时间|时间戳

    1.1 获得当前日期+时间(date + time)函数:now() mysql> select now();+———————+| now() |+———————+| 2013-04-08 20 ...

  8. Ubuntu中启用ssh服务---转载

    ssh程序分为有客户端程序openssh-client和服务端程序openssh-server.如果需要ssh登陆到别的电脑,需要安装openssh-client,该程序Ubuntu是默认安装的.而如 ...

  9. CSS3 文字与字体相关样式

    给文字添加阴影 文字换行 客户端文字 font-size-adjust属性 给文字添加阴影-text-shadow属性 text-shadow:length length length color 前 ...

  10. Windows zip安装MySQL

    1. mysqld初始化时my.ini的第二个默认位置是%windir%/my.ini rem 1.查看此变量对应的目录,在此目录下编辑 my.ini,mysqld会自动找到 echo %WINDIR ...