Task执行原理解析

Apache Ant中任务(Task)的执行原理实例说明 前言:Ant工具是采用纯Java语言编写的一款自动化构建、编译、部署的工具,与Apache基金组织下的Maven工具类似,只是Maven后来的一些新功能,使得Maven比Ant工具更加优秀。至于Ant工具的安装和配置请查看本人其他相关的文档,在此不再赘述。 注:本章博客的测试系统为windows系统。 一、ANT的安装目录及环境变量的配置:          安装目录:D:\Program 阅读详情

这里写图片描述

1.当Driver中的CoarseGrainedSchedulerBackend给CoarseGrainedExecutorBackend发送LaunchTask之后,CoarseGrainedExecutorBackend在收到LaunchTask消息后,首先会反序列化TaskDescription:

val taskDesc = ser.deserialize[TaskDescription](data.value)

2.Executor会通过会通过launchTask来执行Task:

executor.launchTask(this, taskId = taskDesc.taskId, attemptNumber = taskDesc.attemptNumber,
  taskDesc.name, taskDesc.serializedTask)

3.TaskRunner在ThreadPool来运行具体的Task,在TaskRunner的run方法中首先会通过调用statusUpdate给Driver发信息汇报自己的状态说明自己是Running状态:

execBackend.statusUpdate(taskId, TaskState.RUNNING, EMPTY_BYTE_BUFFER)

4.TaskRunner内部会做一些准备工作:例如反序列化Task的依赖:

Task.deserializeWithDependencies(serializedTask)

然后通过网络来获取需要的文件、Jar等;

updateDependencies(taskFiles, taskJars)

5.然后是反序列Task本身;

task = ser.deserialize[Task[Any]](taskBytes, Thread.currentThread.getContextClassLoader)

6.调用反序列化后的Task.run方法来执行任务并获得执行结果

val (value, accumUpdates) = try {
  val res = task.run(
    taskAttemptId = taskId,
    attemptNumber = attemptNumber,
    metricsSystem = env.metricsSystem)
  threwException = false
  res

其中Task的run方法调用的时候会导致会导致Task的抽象方法runTask的调用,在Task的runTask内部会调用RDD的iterator()方法,该方法就是我们针对当前Task所对应的Partition进行计算的关键之所在,在具体的处理内部会迭代Partition的元素并交给我们自定义的function进行处理!

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

val (rdd, dep) = ser.deserialize[(RDD[_], ShuffleDependency[_, _, _])](

最终计算会调用RDD的compute方法:

def compute(split: Partition, context: TaskContext): Iterator[T]

具体计算的时候有具体的RDD,例如MapPartitionsRDD的compute:

override def compute(split: Partition, context: TaskContext): Iterator[U] =
  f(context, split.index, firstParent[T].iterator(split, context))

其中的f就是我们在当前的Stage中计算具体Partition的业务逻辑代码;
对于ResultTask:

val (rdd, func) = ser.deserialize[(RDD[T], (TaskContext, Iterator[T]) => U)](
  ByteBuffer.wrap(taskBinary.value), Thread.currentThread.getContextClassLoader)
_executorDeserializeTime = System.currentTimeMillis() - deserializeStartTime

metrics = Some(context.taskMetrics)
func(context, rdd.iterator(partition, context))

7.把执行结果序列:

val valueBytes = resultSer.serialize(value)

并根据大小判断不同的结果传回给Driver的方式
8.CoarseGrainedExecutorBackend给DriverEndpoint发送StatusUpdate来传输执行结果,DriverEndpoint会把执行结果传递给TaskSchedulerImpl处理,然后交给TaskResultGetter内部通过线程去分别处理Task执行成功和失败时候的不同情况,然后告诉DAGScheduler任务处理结束的状况。

补充说明:

1.在执行具体Task的业务逻辑前会进行四次反序列:

a) TaskDescription的反序列化;

b) 反序列化Task的依赖;

c) Task的反序列化;

d) RDD反序列化;

2.在Spark 1.6中AkkaFrameSize是128MB,所有可以广播非常大的任务;而任务的执行结果可以最大达到1G。

Spring 源码硬核解析系列专题(二十七):Spring Cloud Task 的短生命周期任务源码解析 在前几期中,我们从 Spring 核心到 Spring Boot 的多个模块,再到 Spring Cloud Security,逐步揭示了 Spring 生态在微服务领域的广泛应用。Spring Cloud Task 提供了短生命周期任务的管理框架,适用于一次性或定时任务,如数据迁移、批处理等。本篇将深入 Spring Cloud Task 的源码,剖析其核心机制与实现原理,并补充 图示。 阅读详情

相关推荐

Flink 源码深入解析:Task 深入解析 大数据

总结起来,Task 是 Flink 中的核心概念之一,它负责处理数据流的一部分,每个 Task 在一个线程中执行。通过分析 Task 的源代码,我们可以了解到 Task 在 Flink 内部的实现细节,包括任务的初始化、数据处理逻辑、资源清理和异常处理等。当我们使用 Flink 进行大数据处理时,了解 Task 的工作原理和源代码实现可以帮助我们更好地理解和调优任务的执行过程,提高整体的性能和效率。在 Flink 的源代码中,Task 类是 Task Execution 的核心实现。

ByteHackerX的博客 162

Task执行内幕与结果处理解密

1.当Driver中的CoarseGrainedSchedulerBackend给CoarseGrainedExecutorBackend发送LaunchTask之后,CoarseGrainedExecutorBackend在收到LaunchTask消息后,首先会反序列化TaskDescription:val taskDesc = ser.deserialize[TaskDescription](d

sundujing的博客 1281

scRNA-seq | 吐血整理的单细胞入门教程(从原理到代码实操)(二)

scRNA-seq | 吐血整理的单细胞入门教程(从原理到代码实操)(二)

m0_72224305的博客 4305

解析JSON数据

解析JSON数据 [{}], {[]}格式 例子: {“TaskId”:“75aa50d61921680000016aed10589025011”,“Unit”:“Kbps”,“Interval”:60,“Data”:[{“Ip”:“103.36.192.170”,“Data”:[[“2019-05-22T03:09:00Z”,0]]}]} {"TaskId":"75aa50d619216800...

Sanmu 165

「点燃我,温暖你」用Python制作一个动态爱心效果

最近「点燃我,温暖你」这部剧非常火,讲述的是程序员的爱情故事。其中陈飞宇饰演的男主李峋,在剧中用程序做出的爱心跳动效果,非常炫。

Modeler_xiaoyu的博客 1万+

奇异值分解(SVD)C++实现

奇异值分解SVD(紧奇异值分解,截断奇异值分解)C++实现

weixin_45804601的博客 4172

C#:终于有人把 ValueTask 说清楚了!

目录1,可用版本与参考资料2,ValueTask和 Task3,编译器如何编译4,ValueTask 有什么优势5,ValueTask 创建异步任务6,IValueTaskSource ...

farway000的博客 6178

安卓风控对抗实战:如何用AOSP定制ROM绕过Momo、AIDA64等检测(从环境搭建到设备画像)

本文详细解析了如何通过定制AOSP ROM绕过Momo、AIDA64等安卓风控检测工具的设备指纹识别。从环境搭建到硬件参数修改,再到内核级特征混淆,提供了一套完整的底层对抗方案,显著提升设备伪装通过率。

weixin_30687051的博客 488

C# 中使用ValueTask优化异步方法

我们在开发过程中,经常使用async的异步方法,但是有些时候,异步的方法中,可能包含一些同步的处理。本文主要介绍通过ValueTask这个struct,优化异步处理的方法性能。

weixin_43263355的博客 937

MNE-python 进行源定位教程(一)配置环境

根据MNE官网提供的教程进行复现,遇到各种问题的记录。 配置环境 python3.8 + Anaconda + pycharm MNE-Python 是一个开源 Python 模块,用于处理、分析和可视化功能性神经影像数据(EEG、MEG、sEEG、ECoG 和 fNIRS)。 根据官方建议,将MNE-python安装在anaconda的虚拟环境中。 1. 安装Anaconda 过程点击这里 2. 配置pycharm 2.1 导入MNE-python工具包 在pycharm的菜单栏里打开VCS-Create

zQIANYUN的博客 3173

Xilinx FPGA 10G Ethernet Subsystem example

The 10G Ethernet subsystem provides 10 Gb/s Ethernet MAC, Physical Coding Sublayer(PCS) and Physical Medium Attachment (PMA) transmit and receive functionality over anAXI4-Stream interface.

青城扬沙的博客 2378

使用 ValueTask 异步操作的节省内存

概述:在现代 C# 编程中,了解异步构造(如 和 )之间的细微差别对于优化内存使用率和应用程序性能至关重要。这个故事深入探讨了一个真实世界的场景,在这个场景中,使用可以节省大量内存。通过实际用例和基准分析,我们探讨了如何有效地处理异步操作,同时最大限度地减少内存分配。ValueTaskTaskValueTaskValueTask大多数时候可能不会击中。await大多数情况下,您将立即可用的结果,因...

dotNET跨平台 274

一步到位解决Docker拉取镜像失败的问题!超详细的Docker代理设置教程!(使用代理解决群晖Docker获取注册表失败的问题)

一步到位解决Docker拉取镜像失败的问题!超详细的Docker代理设置教程!(使用代理解决群晖Docker获取注册表失败的问题)

XiaoqiangClub的博客 1万+

Gradle深入解析 - Task原理(执行篇)

前2篇文章探究了gradle是如何处理和的,至此Task的前期工作就已经完成了下面就该执行Task了,如果观察过Task执行的话,会留意到console输出中Task后面有的带有执行结果的标识,如SKIPPEDUP-TO-DATE等除了不带标识的和带有EXECUTED标识的表示是真正执行过Task的action的,其他的要么是从缓存中读取的结果,要么是不需要执行,这是gradle做的一个task执行的优化,下面也会针对gradle是通过什么判定出这些执行结果的我们会看到gradle是如何将。

chuyouyinghe的专栏 1521

ABAP Platform 2025 到来之后,我们该怎样重新理解 SAP S/4HANA 2025 的开发边界

2025年10月,SAP正式发布S/4HANA Cloud Private Edition 2025及S/4HANA 2025,其技术底座ABAP Platform 2025全面支持SAP HANA数据库。新版平台强调Clean Core理念升级为四级成熟度模型,推动ABAP Cloud成为扩展开发首选方案。AI能力正式融入ABAP开发全流程,包括代码生成、迁移辅助等场景。RAP框架显著增强,支持跨业务对象协作、树形视图等复杂业务场景。ADT开发工具持续进化,新增内存分析、单元测试等专业功能,形成完整开发工

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 304

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Apache DolphinScheduler Worker Task执行原理解析

Apache DolphinScheduler是一个分布式、易扩展的可视化工作流调度开源系统,适用于企业级场景。它提供了以下主要功能,通过可视化操作,提供了工作流和任务全生命周期的数据处理解决方案。白鲸开源是一家开源原生的 DataOPS 商业公司,由多个Apache基金会成员创立。公司主要参与贡献了两个Apache开源项目,一个是Apache DolphinScheduler,另一个是Apache SeaTunnel。基于这两个项目,我们打造了一个商业产品——WhaleStudio。

Apache DolphinScheduler开源社区 1931

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C#.NET Task 与 async await 深入解析:底层原理、执行流程与实战误区

C# 异步编程深度解析:Task与async/await机制 本文深入剖析了C#中Task和async/await的核心机制,澄清了常见的误解: Task本质:Task是异步操作的抽象表示,而非线程本身。它统一封装了不同来源的异步操作,携带状态、结果和组合能力。 异步执行模型:async/await本质是编译器生成的异步状态机,通过continuation机制实现非阻塞等待,而非简单的多线程。 关键区分: I/O密集型操作依赖操作系统异步I/O,不占用线程 CPU密集型任务才需要Task.Run使用线程池

tangPHP的博客 477

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

37 Spark之Task执行原理及结果

第三十七课 Spark之Task执行原理及结果 主要内容 1. Task执行原理流程图 2. Task执行源码 3. Task执行结果在Driver端的处理

Hipparchus的博客 1万+

Gradle 核心之 Task

只有 Task 才可以在Gradle的执行阶段去执行(其实质是执行的 Task 中的一系列 Action),所以 Task 的重要性不言而喻。Task 的定义方式有如下两种:Task 的配置方式也有如下两种:配置了 group 后可以在 Android Studio 的 Gradle 面板看到对应的 Task Group 及其分组下的 Tasks,如下图所示:一般来说都推荐为我们的 task 配置 group,便于我们查找 task。

Dream It Possible 1972

Spark调度底层执行原理详解(第35天)

Spark调度底层执行原理是一个复杂而精细的过程,它涉及到多个组件的交互和协同工作,以实现大数据处理的高效性和灵活性。本文主要对Spark调度底层执行原理进行详细解析。

syhiiu的博客 3500

Task执行源码详细剖析

1、task是封装在一个线程中(TaskRunner) class TaskRunner( execBackend: ExecutorBackend, val taskId: Long, val attemptNumber: Int, taskName: String, serializedTask: ByteBuffer) e

tianqinglei的博客 621

深入解析Task工作原理、项目实践与线程死锁处理技巧

​Task使用建议:优先使用简化异步代码,避免直接操作线程;​死锁预防:代码审查时重点关注锁顺序,结合超时和工具检测;​性能优化:通过Task.Run平衡CPU与I/O任务的线程池利用率。

品质生活,极致编程。 780

StreamTask 执行

TaskExecutor.submitTask Task task = new Task( // TODO taskExecutorServices.createShuffleEnvironment taskExecutorServices.getShuffleEnvironment() 创建ShuffleEnvironment T TaskExecutorServices.createShuffleEnvironment -> createShuffleEnvironment

m0_46449152的博客 414
上一篇: TaskScheduler解密:Spark shell案例,TaskScheduler和SchedulerBackend、FIFO与FAIR模式调度解密、Task数据本地性资源分配
下一篇: BlockManager原理解析
囧芝麻
博客等级 码龄10年 10粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值