首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spark Task 的执行流程③ - 执行 task

本文为 Spark 2.0 源码分析笔记,其他版本可能稍有不同 创建、分发 Task一文中我们提到 TaskRunner(继承于 Runnable) 对象最终会被提交到 Executor 的线程池中去执行...,本文就将对该执行过程进行剖析。...该执行过程封装在 TaskRunner#run() 中,搞懂该函数就搞懂了 task 是如何执行的,按照本博客惯例,这里必定要来一张该函数的核心实现: ?...需要注意的是,上图的流程都是在 Executor 的线程池中的某条线程中执行的。上图中最复杂和关键的是 task.run(...)...ShuffleManager 中获取 ShuffleWriter 对象 writer 得到对应 partition 的迭代器后,通过 writer 将数据写入文件系统中 停止 writer 并返回结果 ---- 参考:《Spark

43710
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Spark 的作业执行原理

    参见书籍 《图解Spark:核心技术与案例实战》 要点概述 ** 作业(Job)提交后由行动操作触发作业执行,根据RDD的依赖关系构建DAG图,由DAGSheduler(面向阶段的任务调度器)解析 *...划分调度阶段 Spark调度阶段的划分在DAGScheduler中的handleJobSubmitted方法中根据最后一个RDD生成ResultStage阶段开始的。...在调度过程中,有父调度阶段,先把该阶段放到waitingStages列表中,递归调用submitStage直到所有的依赖阶段都准备好,如果没有父调度阶段则使用submitMissingTasks方法提交执行...提交任务 在执行DAGSheduler的submitMissingTasks方法时会根据调度阶段的partition划分为相应个数的task,形成任务集,交由TaskSheduler进行处理,对于不同的阶段划分出的...执行任务 task的执行主要依靠Executor的lanuchTask方法,初始化一个TaskRunner封装任务,管理任务执行 的细节,把TaskRunner放到ThreadPool中执行

    50760

    Spark 多个Stage执行是串行执行的么?

    下图是Spark UI上呈现的。那这四个Stage的执行顺序是什么呢? ? Snip20160903_11.png 再次看Spark UI上的截图: ?...根据上面的代码,我们只有四颗核供Spark使用,Stage0 里的两个任务因为正在运行,所以Stage1 只能运行两个任务,等Stage0 运行完成后,Stage1剩下的两个任务才接着运行。...之后Stage2 是在Stage1 执行完成之后才开始执行,而Stage3是在Stage2 执行完成才开始执行。...现在我们可以得出结论了: Stage 可以并行执行的 存在依赖的Stage 必须在依赖的Stage执行完成后才能执行下一个Stage Stage的并行度取决于资源数 我么也可以从源码的角度解释这个现象:...当然Spark只是尝试提交你的Tasks,能不能完全并行运行取决于你的资源数了。

    1.3K40

    3.1 Spark应用执行机制分析

    3.1 Spark应用执行机制分析 下面对Spark Application的基本概念和执行机制进行深入介绍。...[插图] 图3-1 Spark基本概念之间的关系 3.1.2 Spark应用执行机制概要 Spark Application从提交后到在Worker Node执行,期间经历了一系列变换,具体过程如图3-...Spark出于节约内存的考虑,采用了延迟执行的策略,如前文所述,只有Action算子才可以触发整个操作序列的执行。另外,Spark对于中间计算结果也不会重新分配内存,而是在同一个数据块上流水线操作。...在计算时,Spark会在具体执行计算的Worker节点的Executor中创建线程池,Executor将需要执行的任务通过线程池来并发执行。...TaskScheduler将任务分发到Executor,执行多线程并行任务。图3-3为Spark应用的提交与执行示意图。 [插图] 图3-3 Spark应用的提交与执行

    65160

    大数据技术之_19_Spark学习_01_Spark 基础解析 + Spark 概述 + Spark 集群安装 + 执行 Spark 程序

    Spark 实现了高效的 DAG 执行引擎,可以通过基于内存来高效处理数据流。计算的中间结果是存在于内存中的。...从 Spark 程序运行的层面来看,Spark 主要分为驱动器节点和执行器节点。 2.2 机器准备   准备两台以上 Linux 服务器,安装好 JDK1.8。...2.3 下载 Spark 安装包 image.png Step0、使用下载命令 wget 下载地址 Step1、上传 spark-2.1.1-bin-hadoop2.7.tgz 安装包到 Linux...同理:我们再干掉 hadoop103 上的 Master 进程,然后再次执行 WordCount 程序,看是否能够执行成功,经过测试,程序依旧可以执行成功,到此为止,Spark 的高可用完成!...地址,但是也可以正常启动 spark shell 和执行 spark shell 中的程序,其实是启动了 spark 的 cluster 模式,如果 spark 是单节点,并且没有指定 slave 文件

    97120

    Spark详解02Job 逻辑执行图Job 逻辑执行

    Job 逻辑执行图 General logical plan GeneralLogicalPlan.png 典型的 Job 逻辑执行图如上所示,经过下面四个步骤可以得到最终执行结果: 从数据源(可以是本地...逻辑执行图的生成 了解了 Job 的逻辑执行图后,写程序时候会在脑中形成类似上面的数据依赖图。然而,实际生成的 RDD 个数往往比我们想想的个数多。...在 Spark 中,完全依赖被称为 NarrowDependency,部分依赖被称为 ShuffleDependency。...因此,Spark 设计了一个非常复杂的算法来解决该问题(算法部分我还没有深究)。...Discussion 至此,我们讨论了如何生成 job 的逻辑执行图,这些图也是 Spark 看似简单的 API 背后的复杂计算逻辑及数据依赖关系。

    1.1K110

    Spark SQL底层执行流程详解(好文收藏)

    ---- 本文目录 一、Apache Spark 二、Spark SQL发展历程 三、Spark SQL底层执行原理 四、Catalyst 的两大优化 传送门:Hive SQL底层执行过程详细剖析 一...三、Spark SQL底层执行原理 Spark SQL 底层架构大致如下: 可以看到,我们写的SQL语句,经过一个优化器(Catalyst),转化为RDD,交给集群执行。...我们要了解Spark SQL的执行流程,那么理解Catalyst的工作流程是非常有必要的。...SparkPlanner模块:转化为物理执行计划 根据上面的步骤,逻辑执行计划已经得到了比较完善的优化,然而,逻辑执行计划依然没办法真正执行,他们只是逻辑上可行,实际上Spark并不知道如何去执行这个东西...此时就需要将逻辑执行计划转化为物理执行计划,也就是将逻辑上可行的执行计划变为Spark可以真正执行的计划。

    4K20

    Spark Core源码精读计划7 | Spark执行环境的初始化

    执行环境。...SparkEnv的入口 在文章#2的代码#2.5~#2.6中,我们已经得知Driver执行环境是通过调用SparkEnv.createDriverEnv()方法来创建的,这个方法位于SparkEnv类的伴生对象中...Spark作为一个内存优先的大数据处理框架,内存管理机制是非常精细的,主要涉及存储和执行两大方面。其初始化代码如下。...总结 本文从SparkEnv的初始化方法入手,按顺序简述了十余个与Spark执行环境相关的内部组件及其初始化逻辑。...这些组件与Spark框架的具体执行流程息息相关,我们之后也会深入研究其中的一部分,特别重要的如RPC环境RpcEnv、Shuffle管理器ShuffleManager、内存管理器MemoryManager

    80530

    Spark Task 的执行流程② - 创建、分发 Task

    本文为 Spark 2.0 源码分析笔记,由于源码只包含 standalone 模式下完整的 executor 相关代码,所以本文主要针对 standalone 模式下的 executor 模块,文中内容若不特意说明均为...standalone 模式内容 创建 task(driver 端) task 的创建本应该放在分配 tasks 给 executors一文中进行介绍,但由于创建的过程与分发及之后的反序列化执行关系紧密...及依赖的环境都会被转换成 byte buffer,然后与 taskId、taskName、execId 等一起构造 TaskDescription 对象,该对象将在之后被序列化并分发给 executor 去执行...对象创建 TaskRunner 然后提交到自带的线程池中执行。...关于 TaskRunner、线程池以及 task 具体是如何执行的,将会在下一篇文章中详述,本文只关注创建、分发 task 的过程。 ----

    71410

    使用Crontab定时执行Spark任务【面试+工作】

    使用Crontab定时执行Spark任务【面试+工作】 ?...本文的主要内容有: Linux下使用定时器crontab Linux下如何编写Perl脚本 在Java程序中调用Linux命令 实例:每天0点30分执行Spark任务 1....Linux下使用定时器crontab 1、安装 ? 2、启停命令 ? 3、查看所有定时器任务 ? ? 这个定时器任务是每分钟用sh执行test.sh脚本 4、添加定时器任务 ? ?...实例:每天0点30分执行Spark任务 1、首先编写执行Spark任务的Perl脚本:getappinfo.pl ? 2、添加定时器任务:每天的0点30分执行getappinfo.pl ?...这个程序首先从Hive中查询数据并展示出来,然后再调用Linux的shell执行另一个Perl脚本getappinfo_new.pl,我们可以在这个脚本中写入其他操作

    2.3K20

    自适应查询执行:在运行时提升Spark SQL执行性能

    前言 Catalyst是Spark SQL核心优化器,早期主要基于规则的优化器RBO,后期又引入基于代价进行优化的CBO。但是在这些版本中,Spark SQL执行计划一旦确定就不会改变。...Spark SQL自适应执行优化引擎(Adaptive Query Execution,简称AQE)应运而生,它可以根据执行过程中的中间数据优化后续执行,从而提高整体执行效率。...核心在于:通过在运行时对查询执行计划进行优化,允许Spark Planner在运行时执行可选的执行计划,这些计划将基于运行时统计数据进行优化,从而提升性能。...自适应查询执行框架(AQE) 自适应查询执行最重要的问题之一是何时进行重新优化。Spark算子通常是pipeline化的,并以并行的方式执行。...Spark UI将只显示当前计划。为了查看使用Spark UI的效果,用户可以比较查询执行之前和执行完成后的计划图: ? || 检测倾斜join 倾斜连接优化的效果可以通过连接节点名来识别。

    2.3K10
    领券