承接上一节内容,Client向Master发起RequestSubmitDriver请求,Master将DriverInfo添加待调度列表中(waitingDrivers),下面针对于Driver进一步梳理
 
一、Master对Driver资源分配
     大致流程如下:
     
     waitingDrivers与aliveWorkers进行资源匹配,
  • 在waitingDrivers循环内,轮询所有aliveWorker
  • 如果aliveWorker满足当前waitingDriver资源要求,给Worker发送LaunchDriver指令并将 waitingDriver移除waitingDrivers,则进行下一次waitingDriver的轮询工作
  • 如果轮询完所有aliveWorker都不满足waitingDriver资源要求,则进行下一次waitingDriver的轮询工作
  • 所有发起的轮询开始点都上次轮询结束点的下一个点位开始
 
二、Worker运行DriverRunner
Driver的启动,流程如下:
  • 当Worker遇到LaunchDriver指令时,创建并启动一个DriverRunner
  • DriverRunner启动一个线程【DriverRunner for [driverId]】处理Driver启动工作
  • 【DriverRunner for [driverId]】:
    • 添加JVM钩子,针对于每个diriverId创建一个临时目录
    • 将DriverDesc.jarUrl通过Netty从Driver机器远程拷贝过来
    • 根据DriverDesc.command模板构建本地执行的command命令,并启动该command对应的Process进程
    • 将Process的输出流输出到文件stdout/stderror,如果Process启动失败,进行1-5的秒的反复启动工作,直到启动成功,在释放Worker节点的DriverRunner的资源
 
三、DriverRunner创建并运行DriverWrapper
     DriverWrapper的运行,流程如下:
     
  • DriverWapper创建了一个RpcEndpoint与RpcEnv
  • RpcEndpoint为WorkerWatcher,主要目的为监控Worker节点是否正常,如果出现异常就直接退出
  • 然后当前的ClassLoader加载userJar,同时执行userMainClass
  • 执行用户的main方法后关闭workerWatcher
 
     

【Spark2.0源码学习】-7.Driver与DriverRunner的更多相关文章

  1. 【Spark2.0源码学习】-1.概述

          Spark作为当前主流的分布式计算框架,其高效性.通用性.易用性使其得到广泛的关注,本系列博客不会介绍其原理.安装与使用相关知识,将会从源码角度进行深度分析,理解其背后的设计精髓,以便后续 ...

  2. spark2.0源码学习

    [Spark2.0源码学习]-1.概述 [Spark2.0源码学习]-2.一切从脚本说起 [Spark2.0源码学习]-3.Endpoint模型介绍 [Spark2.0源码学习]-4.Master启动 ...

  3. 【Spark2.0源码学习】-2.一切从脚本说起

    从脚本说起      在看源码之前,我们一般会看相关脚本了解其初始化信息以及Bootstrap类,Spark也不例外,而Spark我们启动三端使用的脚本如下: %SPARK_HOME%/sbin/st ...

  4. 【Spark2.0源码学习】-3.Endpoint模型介绍

         Spark作为分布式计算框架,多个节点的设计与相互通信模式是其重要的组成部分.   一.组件概览      对源码分析,对于设计思路理解如下:            RpcEndpoint: ...

  5. 【Spark2.0源码学习】-4.Master启动

         Master作为Endpoint的具体实例,下面我们介绍一下Master启动以及OnStart指令后的相关工作   一.脚本概览      下面是一个举例: /opt/jdk1..0_79/ ...

  6. 【Spark2.0源码学习】-6.Client启动

    Client作为Endpoint的具体实例,下面我们介绍一下Client启动以及OnStart指令后的额外工作 一.脚本概览      下面是一个举例: /opt/jdk1..0_79/bin/jav ...

  7. 【Spark2.0源码学习】-5.Worker启动

         Worker作为Endpoint的具体实例,下面我们介绍一下Worker启动以及OnStart指令后的额外工作   一.脚本概览      下面是一个举例: /opt/jdk1..0_79/ ...

  8. 【Spark2.0源码学习】-9.Job提交与Task的拆分

          在前面的章节Client的加载中,Spark的DriverRunner已开始执行用户任务类(比如:org.apache.spark.examples.SparkPi),下面我们开始针对于用 ...

  9. 【Spark2.0源码学习】-8.SparkContext与Application介绍

             在前面的内容,我们针对于RpcEndpoint启动以及RpcEndpoint消息处理机制进行了详细的介绍,在我们的大脑里,基本上可以构建Spark各节点的模样.接下来的章节将会从Sp ...

随机推荐

  1. 游戏数据分析中“次日留存率”与“游戏生命周期第N天上线率”的SAS实现

    在游戏行业,次日留存率是个很重要的指标,对于评价一款游戏的优劣具有很重要的参考价值. 下面先看以下相关的定义: 用户留存:统计时间区间内,新登用户在随后不同时期的登录使用情况. 日次留存率:日新登用户 ...

  2. 彻底卸载Windows 10中OneDrive

    批处理来源网上. @rem OneDrive Complete uninstaller batch process for Windows 10. @rem Run as administrator ...

  3. 关于SpringMVC

    SpringMVC 原理:1.用户发送请求给服务器.url:user.do2.服务器收到请求.发现DispatchServlet可以处理.于是调用DispatchServlet.3.DispatchS ...

  4. Sqluldr2 libclntsh.so报错处理

    Sqluldr2 libclntsh.so报错处理 处理报错 [oracle@oracledg tmp]$ ./sqluldr2linux64.bin ./sqluldr2linux64.bin: e ...

  5. ubuntu 更换为mac主题

    step1. 安装相关软件包 sudo add-apt-repository ppa:noobslab/themes sudo apt-get update sudo apt-get install ...

  6. Mysql数据表去重

    查询不重复元素个数 select count(distinct domain) from black_botnet_domian; 查询表中元素个数大于等于2的元素 SELECT goods_id,g ...

  7. Spring MVC @SessionAttributes注解

    @SessionAttributes原理 默认情况下Spring MVC将模型中的数据存储到request域中.当一个请求结束后,数据就失效了.如果要跨页面使用.那么需要使用到session.而@Se ...

  8. Centos Tomcat监控

    1.Window环境下jdk的bin目录中提供jvisualvm.exe工具,但是linux环境中的jdk未提供. 用window下的jvisualvm远程监控linux环境下的tomcat 两种连接 ...

  9. Selenium IDE录制脚本时弹出窗口的完美处理

    很多朋友录制脚本时新打开弹出窗口后无法定位元素,我也遇到同样的问题,国内没有什么好的资料,于是就阅读英文,不断尝试,感觉那个selectWindow(title)什么就是个坑,我用这种方法成功处理后得 ...

  10. poi横纵导出

    dao <select id="selectTargetModel" resultMap="targetMap"> select si.SHOP_N ...