Spark2.2 Task原理分析及源码解析

本文深入探讨Spark的任务(Task)概念,包括ShuffleMapTask和ResultTask,详细解析Task的运行流程,从Executor的run方法到Task的runTask方法,特别是ShuffleMapTask的runTask方法。在Executor上,Task通过共享变量处理相同Rdd,并使用HashPartitioner进行分区写入。最后,Task的状态通过statusUpdate()方法进行更新。
摘要由CSDN通过智能技术生成

Task是什么

task是一个执行单元。我们有两种任务:

  • org.apache.spark.scheduler.ShuffleMapTask
  • org.apache.spark.scheduler.ResultTask

Spark作业由一个或多个stages组成。
job的最后一个阶段是由多个ResultTasks组成的,之前的stages由ShuffleMapTasks组成。
ResultTask执行task并将task输出返回给driver Application。
ShuffleMapTask执行task,并将task输出分配给多个bucket(基于task的partitioner个数)。


Task源码解析

  • 前提:Executor接收到LaunchTask(),运行TaskRunner(),执行Executor.run()方法;
    • updateDependencies()为task运行准备工作,加载配置文件,jars
    • 反序列化task,调用Task.run( )方法
  • Task.run( )方法,其实是调用Task的抽象方法runTask( )
    • ShuffleMapTask.runTask( )
    • ResultTask.runTask( )

伪代码:Executor的run方法

    override def run(): Unit = {

        //拷贝配置文件 jar 资源 之类 拷贝过来
        updateDependencies(taskDescription.addedFiles, taskDescription.addedJars)

        /**
         * 调用 task的 run()方法
         * 返回 task【ShuffleMapTask/ResultTask】结果数据的存储位置
         */
        val value = try {
          
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生命不息丶折腾不止

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值