Spark内核架构原理

1.Driver

选spark节点之一,提交我们编写的spark程序,开启一个Driver进程,执行我们的Application应用程序,也就是我们自己编写的代码。Driver会根据我们对RDD定义的操作,提交一大堆的task去Executor上。Driver注册了一些Executor之后,就可以开始正式执行我们的Spark应用程序了,首先第一步,创建初始RDD,读取数据。HDFS文件内容被读取到多个Worker节点上,形成内存中的分布式数据集,也就是初始RDD。

2.Master

是一个进程,主要负责资源的调度和分配,还有集群的监控等职责。

3.Worker

由我们spark配置文件slave决定,它是一个进程。主要负责两个,一个是自己内存存储的RDD的某个partition ;另一个是启动其他进程和线程,对RDD上的partition 进行并行的处理和计算。

4.Executor

Worker会为应用程序启动Executor,Executor是一个进程。Executor启动之后,会向Driver进行反注册,这样,Driver就知道,哪些Executor是为它服务的了。Executor接收到task之后,会启动多个线程来执行task。

5.Task

Executor会为应用程序启动Task线程,Executor和Task其实就是执行负责执行,对RDD的partition 进行并行的计算了,也就是执行我们对RDD定义的,比如map,flatMap,reduce等算子操作。task会对RDD的partition数据执行指定的算子操作,形成新的RDD的partition。Task有两种:ShuffleMapTask和ResultTask,只有最后一个stage 是ResultTask,之前的stage都是ShuffleMapTask。

Spark架构深度剖析

  我们有一个Spark应用程序(Application)选择一台安装了spark的节点作为client,当我们通过spark-submit结合shell提交Application就会在client中启动一个Driver进程。spark-submit使用我们之前一直使用的那种提交模式去提交的时候,我们之前的提交模式叫做standalone,其实会通过反射的方式,创建一和构造一个DriverActor进程出来。

  Driver进程启动之后,会做一些初始化的操作,我们在编写的spark应用时第一行就是先构造 SparkConf,再构造 SparkContext。SparkContext 在初始化的时候,做的最重要的两件事是,就是构造出来 DAGScheduler 和 TaskScheduler。

  TaskScheduler 实际上会负责通过它对应的一个后台进程去连接spark集群上的 Master 节点,向Master注册Application。说白了就是让Master 知道,有一个新的Spark应用程序要运行。

  Master在接受到Spark应用程序(Application)的注册申请之后,会通过自己的资源调度算法,会发送请求给在spark集群的 Worker,为这个 Application 启动多个 Executor。为该应用程序进行资源的调度和分配,资源分配就是 Executor 的分配。

  Worker 接收到 Master 的请求之后,会为 Spark 应用(Application)启动 Executor。Executor干的第一件事情是,Executor启动之后会自己反向注册到 TaskScheduler 上,这样,TaskScher 就知道,哪些Executor是为它服务的了。所有Executor都反向注册到 Driver 上之后,Driver 结束 SparkContext 初始化,会继续执行我们的代码。

  每执行到一个action,就会创建一个job,把job提交给DAGScheduler。DAGScher会将job划分为多个stage,然后每个stage创建一个TaskSet,每个 TaskSet 给 TaskScheduler 。

  TaskScheduler 会把TaskSet里每一个Task提交到Executor上执行(task分配算法)。

  Executor每接收到一个Task,都会用TaskRunner来封装Task,然后从线程池里取出一个线程,执行这个Task。TaskRunner将我们编写的代码,也就是要执行的算子以及函数,拷贝,反序列化,然后执行Task。Task有两种:ShuffleMapTask和ResultTask,只有最后一个stage 是ResultTask,之前的stage都是ShuffleMapTask。

  所以,最后整个spark应用程序的执行,就是stage分批次作为TaskSet提交到Executor执行,每个task针对RDD的一个partition,执行我们定义的算子和函数,以此类推,直到所有的操作执行完为止。

Spark- Spark内核架构原理和Spark架构深度剖析的更多相关文章

  1. nagios二次开发(四)---nagios监控原理和nagios架构简介

    nagios监控原理 下面根据上面摘自网络的原理图对nagios的监控原理进行一下简单的说明: 1.nagios通过nsca进行被动监控.那么什么是被动监控呢?被动监测:就是指由被监测的服务器主动上传 ...

  2. 大数据体系概览Spark、Spark核心原理、架构原理、Spark特点

    大数据体系概览Spark.Spark核心原理.架构原理.Spark特点 大数据体系概览(Spark的地位) 什么是Spark? Spark整体架构 Spark的特点 Spark核心原理 Spark架构 ...

  3. Spark入门(1-2)Spark的特点、生态系统和技术架构

    一.Spark的特点 Spark特性 Spark通过在数据处理过程中成本更低的洗牌(Shuffle)方式,将MapReduce提升到一个更高的层次.利用内存数据存储和接近实时的处理能力,Spark比其 ...

  4. Spark技术内幕:Storage 模块整体架构

    Storage模块负责了Spark计算过程中所有的存储,包括基于Disk的和基于Memory的.用户在实际编程中,面对的是RDD,可以将RDD的数据通过调用org.apache.spark.rdd.R ...

  5. Spark集群基础概念 与 spark架构原理

    一.Spark集群基础概念 将DAG划分为多个stage阶段,遵循以下原则: 1.将尽可能多的窄依赖关系的RDD划为同一个stage阶段. 2.当遇到shuffle操作,就意味着上一个stage阶段结 ...

  6. 系统架构--分布式计算系统spark学习(三)

    通过搭建和运行example,我们初步认识了spark. 大概是这么一个流程 ------------------------------                 -------------- ...

  7. 63、Spark Streaming:架构原理深度剖析

    一.架构原理深度剖析 StreamingContext初始化时,会创建一些内部的关键组件,DStreamGraph,ReceiverTracker,JobGenerator,JobScheduler, ...

  8. 【大数据处理架构】1.spark streaming

    1. spark 是什么? >Apache Spark 是一个类似hadoop的开源高速集群运算环境  与后者不同的是,spark更快(官方的说法是快近100倍).提供高层JAVA,Scala, ...

  9. 【原】Spark中Client源码分析(二)

    继续前一篇的内容.前一篇内容为: Spark中Client源码分析(一)http://www.cnblogs.com/yourarebest/p/5313006.html DriverClient中的 ...

随机推荐

  1. Arcgis:什么是栅格数据类型

    栅格数据单元大小 栅格所表示的内容的详细程度(要素现象)通常取决于栅格的单元(像素)大小或空间分辨率. 单元必须足够小,这样才可以捕获到所需的详细信息: 而单元又必须足够大,这样才可以提高计算机存储和 ...

  2. Junit内部解密之四: Junit单元测试最佳实践

    我们做使用Junit工具来做单页测试或接口测试时,需要注意一些问题,包括我们的编码规范,test规范,以及编写测试代码的策略,以下个人的总结. 1.为还没有实现的测试代码抛出一个异常.这就避免了该测试 ...

  3. 使用Erlang实现简单的排序算法:快速排序,冒泡排序,插入排序

    [排序算法] -module(sort). -compile(export_all). %%快速排序 qsort([]) -> []; qsort([Pivot|T]) -> qsort( ...

  4. 09 Memcached 分布式之取模算法的缺陷

    一: Memcached 分布式之取模算法的缺陷(1)假设你有8台服务器,运行中突然down一台,则求余数的底数就7. 后果: key_0%8==0 ,key_0%7==0 =>hist(命中) ...

  5. HDOJ 4923 Room and Moor

    用一个栈维护b的值,每次把一个数放到栈顶. 看栈首的值是不是大于这个数,假设大于的话将栈顶2个元素合并.b的值就是这两个栈顶元素的平均值. .. Room and Moor Time Limit: 1 ...

  6. android Notification 的使用(锁定通知栏)

    近期一直在研究 android .并一边研究一边做应用.当中遇到了把程序通知常驻在 Notification 栏,而且不能被 clear 掉(就像android QQ一样)的问题.经过研究实现了其功能 ...

  7. 由浅到深理解ROS(2)

    ROS文件系统 用户可以直接参看官网:http://wiki.ros.org/ROS/Tutorials/NavigatingTheFilesystem ROS文件系统中的两个最基本的概念:Packa ...

  8. Labview新建项目步骤

    打开Labview软件,点击工具栏中文件选项卡,如图所示. 2 点击新建一个空白项目. 3 此时为未命名项目,按下Ctrl+S保存项目到自己指定的目录并完成命名. 4 如图示在我的电脑上点击右键,新建 ...

  9. vue-cli (vue脚手架)

    vue-cli(脚手架):它可以自动生成目录 1.在网速不佳的情况下可以安装cnpm(淘宝镜像)如果网速快可以不用安装cnpm直接进行下一步操作 第一步:在命令行执行(全局安装cnpm) npm in ...

  10. c# 怎么更改DataTable 中某列的值?

    DataColumns dc = td.Columns["你的列"]; int inx = dc.Ordinal;td.Columns.Remove(dc);dc.DefaultV ...