spark内核架构解密(13)

本期主要介绍下spark的内核架构。spark的应用程序总体来说,主要包括两部分,一部分是Driver,其包括了SparkConf和SparkContext,另一部分就是Executor,运行具体的业务逻辑。

应用程序的提交有两种方式,

1、Driver进程运行在客户端,对应用程序进行监控。

2、主节点指定某个worker节点启动Driver,负责整个应用的监控。

Driver一般运行在一台专门用来提交spark程序的机器上,这台机器一般一定和spark cluster在同样的网络环境中(因为Driver要频繁的和Execuotr进行通信,实质上是CorarseGrainExecutorBackend),并且配置和普通的Worker节点一致。可以通过spark-submit去运行程序,与此同时可以指定运行的各种参数,例如memory、cores...。实际生产环境写shell脚本自动化配置和提交程序,当然当前的机器一定安装了Spark,只不过当前机器不属于集群罢了。

Driver的核心是SparkContext,而SparkContext依赖于SparkConf。SparkContext在初始化的时候会创建DAGScheduler、TaskScheduler、SchedulerBackend。

在实例化的过程中回向Master注册应用程序,Master接受注册,如果没有问题,Master会为当前的应用程序分配AppId并分配计算资源。Master接受用户提交的程序并给Worker发送指令为当前的应用程序分配计算资源。每个Worker节点默认情况下为当前的程序分配一个Executor,在Executor中通过线程池并发执行。Worker节点收到Master发送的LaunchExecutor指令后,会创建ExecutorRunner实例,并调用start方法,来启动CoarseGrainExecutorBackend进程。CoarseGrainExecutorBackend进程里有Executor,并且CoarseGrainExecutorBackend和Executor是一一对应的。Executor内部会维护一个线程池,实际工作的时候,通过TaskRunner来封装task,然后从ThreadPool获取一条线程执行task,执行完后,线程会被回收复用。

在spark中,Transformation操作是延迟计算的,当有action算子时才会触发job。SparkContext会通过DAGScheduler把job中的RDD构成的DAG划分成不同的stage,每个stage内部都是一系列业务逻辑完全相同但是处理数据不同的Tasks,构成TaskSet。

TaskScheduler和SchedulerBackend负责具体的task的执行(遵循数据本地性)。

一个应用程序有可能包含多个stage,最后一个Stage中的Task称为ResultTask,产生job结果。其他前面的Stage中的Task都称为ShuffleMapTask,作为下一个Stage的数据输入,相当与MapReduce中的Mapper。

整个Spark程序的运行,就是DAGScheduler把job划分成不同的Stage,提交TaskSet给TaskScheduler,进而提交给Executor执行(符合数据本地性),每个Task会计算RDD中的一个Partition,基于该Partition来具体执行我们定义的一系列同一个Stage内部的函数,以此轮推...直到整个程序运行完成。

备注:

新浪微博:http://www.weibo.com/ilovepains

微信公众号:DT_Spark

时间: 2024-10-06 00:45:29

spark内核架构解密(13)的相关文章

Spark3000门徒第13课Spark内核架构解密总结

昨晚听了王家林老师的第13课Spark内核架构解密,课堂笔记如下: executor中线程池并发执行和复用,Spark executor, backed by a threadpool to run tasks. 默认一个work为一个Application只开启一个executor.一个worker里executor是多点好还是少点好,看具 体情况. Worker:管理当前Node机器资源,并接受Master的指令来分配具体的计算资源Executor(使用ExecutorRunner 在新的进

Spark内核架构解密(DT大数据梦工厂)

只有知道内核架构的基础上,才知道为什么要这样写程序? 手工绘图来解密Spark内核架构 通过案例来验证Spark内核架构 Spark架构思考 ==========Spark Runtime的几个概念============ 下载下来运行,基本都是standalone模式,如果掌握了standalone,则yarn和mesos,以后不做特别说明,一律是standalone模式 application=driver+executor,executor是具体处理数据分片,里面是线程池并发的处理数据分片

Spark内核架构

SparkContext创建:高层DAGScheduler, 底层TaskScheduler, SchedulerBackend application=driver+executor Spark的程序分成两个部分:driver和executor driver驱动executor Driver部分的源代码:SparkConf+SparkContext executor具体执行 Executor部分的具体源代码:textFile flatMap map等等- Cluster Manager 集群中

(升级版)Spark从入门到精通(Scala编程、案例实战、高级特性、Spark内核源码剖析、Hadoop高端)

本课程主要讲解目前大数据领域最热门.最火爆.最有前景的技术——Spark.在本课程中,会从浅入深,基于大量案例实战,深度剖析和讲解Spark,并且会包含完全从企业真实复杂业务需求中抽取出的案例实战.课程会涵盖Scala编程详解.Spark核心编程.Spark SQL和Spark Streaming.Spark内核以及源码剖析.性能调优.企业级案例实战等部分.完全从零起步,让学员可以一站式精通Spark企业级大数据开发,提升自己的职场竞争力,实现更好的升职或者跳槽,或者从j2ee等传统软件开发工程

Spark视频第5期:Spark SQL架构和案例深入实战

Spark SQL架构和案例深入实战 视频地址:http://pan.baidu.com/share/link?shareid=3629554384&uk=4013289088&fid=977951266414309 王家林老师(邮箱:[email protected] QQ: 1740415547) Spark亚太研究院院长和首席专家,中国目前唯一的移动互联网和云计算大数据集大成者. 在Spark.Hadoop.Android等方面有丰富的源码.实务和性能优化经验.彻底研究了Spark从

spark视频-Spark SQL架构和案例深入实战

Spark亚太研究院决胜大数据时代公益大讲坛第五期:Spark SQL架构和案例深入实战,视频地址:http://pan.baidu.com/share/link?shareid=3629554384&uk=4013289088&fid=977951266414309 王家林老师(邮箱:[email protected] QQ: 1740415547) Spark亚太研究院院长和首席专家,中国目前唯一的移动互联网和云计算大数据集大成者. 在Spark.Hadoop.Android等方面有丰

精通Spark:Spark内核剖析、源码解读、性能优化和商业案例实战

这是世界上第一个Spark内核高端课程: 1, 该课程在对Spark的13个不同版本源码彻底研究基础之上提炼而成: 2, 课程涵盖Spark所有内核精髓的剖析: 3, 课程中有大量的核心源码解读: 4, 全景展示Spark商业案例下规划.部署.开发.管理技术: 5, 涵盖Spark核心优化技巧 该课程是Spark的高端课程,其前置课程是“18小时内掌握Spark:把云计算大数据速度提高100倍以上!”. 培训对象 1,  系统架构师.系统分析师.高级程序员.资深开发人员: 2, 牵涉到大数据处理

【Spark 内核】 Spark 内核解析-下

Spark内核泛指Spark的核心运行机制,包括Spark核心组件的运行机制.Spark任务调度机制.Spark内存管理机制.Spark核心功能的运行原理等,熟练掌握Spark内核原理,能够帮助我们更好地完成Spark代码设计,并能够帮助我们准确锁定项目运行过程中出现的问题的症结所在. Spark Shuffle 解析 Shuffle 的核心要点 ShuffleMapStage与ResultStage 在划分stage时,最后一个stage称为finalStage,它本质上是一个ResultSt

Linux内核架构读书笔记 - 2.5.3 处理优先级

1 优先级的内核表示 内核使用 0 - 139 表示内部优先级,值越低,优先级越高.0 -99 实时进程使用 nice 值 [-20,19]映射到范围100 - 139,如下图 内核定义了一系列宏来辅助优先级之间的转换 sched.h 1 /* 2 * Priority of a process goes from 0..MAX_PRIO-1, valid RT 3 * priority is 0..MAX_RT_PRIO-1, and SCHED_NORMAL/SCHED_BATCH 4 *