zoukankan      html  css  js  c++  java
  • Spark Task 概述

    Task的执行流程:

    1. Driver端中的 CoarseGrainSchedulerBackend 给 CoarseGrainExecutorBacken 发送 LaunchTask 消息

    2. CoarseGrainExecutorBacken 在收到消息后,首先会反序列化 TaskDescription

    3. Executor 通过 launchTask 来执行 Task

    4. TaskRunner 用 ThreadPool 来运行具体的 Task。在 TaskRunner 的 run 方法中首先会调用 statusUpdate 给 Driver发消息汇报自己现在的状态是 Running 状态。

    5. TaskRunner 内部会做一些准备工作,如反序列化 Task 的依赖。然后通过网络来获取依赖的文件、Jar 等

    6. 反序列化 Task本身

    7. 调用反序列化后的 Task.run 方法来执行任务 并获得执行结果。run 方法内部会调用 runTask,这个方法内部会调用 RDD 的 iterator() 方法,iterator 方法就是我们针对当前 Task所对就的 Partition 进行计算的关键所在,会迭代 Partition 的数据并交给我们自定义的  function 进行处理。

        对于 ShuffleMapTask, 首先要对 RDD 以及其依赖关系进行反序列化。

    8. 把执行结果序列化,并根据大小判断不同的结果传回给 Driver 的方式

    9. CoarseGrainExecutorBackend 给 DriverEndpoint 发送 StatusUpdate来传输执行结果, DriverEndpoint 会把执行结果传递给 TaskSchedulerImpl 处理, 针后交给 TaskResultGetter 内部通过线程去分别处理 Task 成功和失败时候的不同情况,然后告诉 DAGScheduler 任务处理结束的状况。

    补充说明: 在执行具体 Task 的业务逻辑前会进行四次反序列化:

    1. TaskDescription 的反序列化

    2. 反序列化 Task 的依赖

    3. Task 的反序列化

    4. RDD反序列化

  • 相关阅读:
    WAF绕过方法
    ”非常危险“的Linux命令
    CSRF--花式绕过Referer技巧
    安卓手机的后门控制工具SPADE
    基于RedHat发行的Apache Tomcat本地提权漏洞
    SQL注入--宽字节注入
    MySQL提权
    CF1067D. Computer Game(斜率优化+倍增+矩阵乘法)
    CF1063F. String Journey(后缀数组+线段树)
    BZOJ4732. [清华集训2016]数据交互(树链剖分+线段树+multiset)
  • 原文地址:https://www.cnblogs.com/langfanyun/p/8137999.html
Copyright © 2011-2022 走看看