您现在的位置是:首页 > 正文

Spark作业执行原理(六)——获取执行结果

2024-02-01 03:30:47阅读 2

        对于Executor的计算结果,会根据结果的大小使用不同的处理策略:

  1. 计算结果在(0,128MB-200KB)区间内:通过Netty直接发送给Driver终端;
  2. 计算结果在[128MB, 1GB]区间内:将结果以taskId为编号存入到BlockManager中,然后通过Netty把编号发送给Driver终端;阈值可通过Netty框架传输参数设置spark.akka.frameSize,默认值是128MB,200KB是Netty预留空间reservedSizeBytes的值;
  3. 计算结果在(1GB,∞)区间内:直接丢弃,可通过spark.driver.maxResultSize配置;

       任务执行完成之后,TaskRunner将任务的执行结果发送给DriverEndpoint,DriverEndpoint接收到信息后,交给TaskSchedulerImpl的statusUpdate方法进行处理,该方法根据不同的任务状态有不同的结果获取策略:

  1. 如果状态类型是TaskState.FINISHED,那么进一步调用TaskResultGetter的enqueueSuccessfulTask。enqueueSuccessfulTask会判断类型,如果IndirectTaskResult,则 需要通过blockid远程来获取结果(sparkEnv.blockManager.getRemoteBytes(blockId));如果是DirectTaskResult,则无需远程获取结果;
  2. 如果状态类型是:TaskState.FAILED、TaskState.KILLED或TaskState.LOST,则调用TaskResultGetter的enqueueFailedTask,特别地,对于TaskState.LOST,还需要将其所在的Executor标记为failed,并根据更新后的Executor重新调度

        如果任务是ShuffleMapTask,那么它需要将结果通过某种机制告诉下游调度阶段,事实上,对于ShuffleMapTask,其结果是一个MapStatus对象,序列化之后存入DirectTaskResult或者IndirectTaskResult中。而DAGScheduler的handleTaskCompletion方法获取这个结果,并把MapStatus注册到MapOutputTrackerMaster中。

case smt:ShuffleMapTask =>
    val shuffleStage = stage.asInstanceOf[ShuffleMapStage]
    updateAccumulators(event)
    ...
    mapOutputTracker.registerMapOutputs(
        shuffleStage.shuffleDep.shuffleId,
        shuffleStage.outputLocs.map(list => if(list.isEmpty) null else list.head),
        changeEpoch = true)

        对于ResultTask,判断作业是否完成,如果完成,则标记改作业完成,清除作业依赖,并发送消息给系统监听总线,告知作业执行完毕。

case rt:ResultTask[_, _] =>
    val resultStage = stage.asInstanceOf[ResultStage]
    resultStage.resultOfJob match{
        case Some(job) =>
            if(!job.finished(rt.outputId)){
                updateAccumulators(event)
                job.finished(rt.outputId) = true
                job.numFinished += 1
 
                if(job.numFinished == job.numPartitions){
                    //标记改作业完成
                    markStageAsFinished(resultStage)
                    //清除依赖资源
                    cleanupStateForJobAndIndepentStates(job)
                    //发送消息给系统监听总线,告知作业执行完毕
                    listenerBus.post(SparkListenerJobEnd(job.jobId, clock.getTimeMillis(), JobSucceeded))
                }
            }
    }

 

转载于:https://www.cnblogs.com/SysoCjs/p/11466061.html

网站文章

  • python变量的内建方法3——String型

    #a=整数型变量1.a.capitalize()#此方法返回的字符串只有它的第一个字符大写的副本。例:In [40]: a='abc'In [41]: a.capitalize()Ou...

    2024-02-01 03:30:40
  • JNDI注入

    JNDI注入

    JNDI(The Java Naming and Directory Interface,Java命名和目录接口)是一组在Java应用中访问命名和目录服务的API,命名服务将名称和对象联系起来,使得我们可以用名称访问对象。

    2024-02-01 03:30:12
  • ES6学习——set map数据结构 、 DOM classlist属性、创建对象 、Symbol应用

    ES6学习——set map数据结构 、 DOM classlist属性、创建对象 、Symbol应用

    对象方法就是把对象中的属性,用匿名函数的形式编程方法(之前就有)。

    2024-02-01 03:30:07
  • 如何在SQLServer中处理每天四亿三千万记录的(数据库大数据处理)

    项目背景这是给某数据中心做的一个项目,项目难度之大令人发指,这个项目真正的让我感觉到了,商场如战场,而我只是其中的一个小兵,太多的战术,太多的高层之间的较量,太多的内幕了。具体这个项目的情况,我有空再写相关的博文出来。这个项目是要求做环境监控,我们暂且把受监控的设备称为采集设备,采集设备的属性称为监控指标。项目要求:系统支持不少于10w个监控指标,每个监控指标的数据更新不大于20秒,存储延迟...

    2024-02-01 03:30:00
  • 《软件开发的201个原则》

    《软件开发的201个原则》

    作为一名从事软件开发工作的读者,深刻体会到《软件开发原则》书中的系列原则,在我开发过程中处处可见。如果遵循这些原则,那么对你的开发是十分有效的。在项目开发过程格遵守开发流程,让一切异常都有迹可循,有法可解,工作效率显著提示。

    2024-02-01 03:29:28
  • ThreadLocal 详解

    ThreadLocal 详解

    如果key使用强引用:业务代码中使用完ThreadLocal ,ThreadLocal Ref被回收了,因为ThreadLocalMap的Entry强引用了threadLocal,造成threadLo...

    2024-02-01 03:29:20
  • 【unlink】 zctf2016_note2

    【unlink】 zctf2016_note2

    【unlink】 zctf2016_note2 1.ida分析 堆溢出,unsigned int用于判断条件,导致的堆溢出 指针数组 2.思路 创建3个chunk,chunk0、chunk1、chun...

    2024-02-01 03:29:12
  • android Preference之android:dependency

    android Preference之android:dependency

    在开发软件设置界面的时候,我们可以采用android系统提供的PreferenceActivity来实现,下面给出一个简单的例子: 1、Activity 代码如下: public class ConfigActivity extends PreferenceActivity { @Override public void onCreate(Bundle save...

    2024-02-01 03:29:05
  • 衡水科技工程学校计算机房照片,衡水科技工程学校数字化校园建设经验

    衡水科技工程学校计算机房照片,衡水科技工程学校数字化校园建设经验

    S cie n ce&Te hc no l o y Vgis i o n科 技视 P.-科技探索 争鸣衡水科技工学程校字化校数园建设经验广彦杜衡(水科技程工校学。河北衡水 0 5 30 0 0)摘【要】根据校学发的展划和各规业专的特,色通“过四一个”实现了数来字化建校设,一张网:校网、一个平园台:数校园平字、台一个库:教学资源、一库制套度:各网项化络管理制度。建在过设中我校程探索出条...

    2024-02-01 03:28:35
  • 【编程实践】:Java基础+MarkDown文件解析器

    个人博客系统正在开发中。。。欢迎路过的java新手一起交流。。。欢迎大佬指正。。。本文主要描述文章发布过程中MarkDown文件的解析过程。MarkDown文件有以下语法说明语法格式标题标题采用#+#...

    2024-02-01 03:28:26