• 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反序列化

  • 相关阅读:
    awk 使用shell 变量
    设计模式之 外观(门面)模式 Facade
    设计模式之 抽象工厂模式
    python 第一课
    Visual Basic 图片连接地址添加
    smarty 不同模板 缓存时间
    PHP 传参过滤
    Nginx 0.7.x + PHP 5.2.10(FastCGI)搭建支持高并发量的Web服务器
    linux vi 编辑命令
    PHP 命令模式 执行文件 并传递参数
  • 原文地址:https://www.cnblogs.com/langfanyun/p/8137999.html
Copyright © 2020-2023  润新知