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

只有知道内核架构的基础上,才知道为什么要这样写程序?

手工绘图来解密Spark内核架构

通过案例来验证Spark内核架构

Spark架构思考

==========Spark Runtime的几个概念============

下载下来运行,基本都是standalone模式,如果掌握了standalone,则yarn和mesos,以后不做特别说明,一律是standalone模式

application=driver+executor,executor是具体处理数据分片,里面是线程池并发的处理数据分片

Drvier(代码部分就是SparkConf+SparkContext):运行程序的时候,具有main方法,并且创建了SparkContext这样的一个环境对象,是整个程序运行调度的核心,它不是资源调度。有高层调度,底层调度。运行对象的时候,会向Master注册当前的程序。Master会分配资源,会有一系列的job,产生stage,交给task scheduler,发给executor,运行之后把结果返回给Drvier,然后关闭SparkContext。

executor:运行在Worker所在的节点,为当前应用程序开启的进程里面的对象,通过线程池并发执行和线程复用。分布在各个集群上的代码,但是要运行的话,这个代码得发过去。一个Worker一般只开辟一个executor,当然也可以配置多个。具体多少excutor,在优化的时候再讲解。

下面的代码是Drvier,里面有DAG

val conf = new SparkConf()//创建SparkConf对象
conf.setAppName("My First Spark App!")//设置应用程序的名称,在程序运行的监控界面可以看到名称
conf.setMaster("local")//此时程序在本地运行,不需要安装Spark集群

val sc = new SparkContext(conf)//通过创建SparkContext对象,通过传入SparkConf实例来定制Spark运行的具体参数和配置信息

然后是产生RDD,就是executor具体执行的代码,就是下面的代码

val lines = sc.textFile("F:/安装文件/操作系统/spark-1.6.0-bin-hadoop2.6/README.md", 1)

==========Spark Cluster的几个概念============

Cluster Manager:集群中获取资源的外部服务,Spark Application的运行不依赖于Cluster Manager。Spark应用程序注册给Cluster Manager,比如Master注册成功,Cluster Manager已经给Master分配好资源。此时运行程序根本不需要Cluster Manager。这是粗粒度的运行方式。

Master的机器配置要很好。

Woker:可以具体运行操作代码的节点。Woker本身不会运行程序的代码,它是管理当前node的内存CPU等资源的使用状况的,它会接受Master分配计算资源(executor,在新的进程中分配 )指令,通过executor runner启动新进程,进行里面有excutor,Worker是工头,Cluster Manager是项目经理,Worker下面有好多人干活的。

Worker会不会在发心跳的时候向Master汇报当前机器的内存和CPU信息?

不会!Worker向Master发心跳只有WorkerID。

如果不发,Master怎么知道它的资源呢?

应用程序注册成功,Master分配资源的时候就知道了

Job:就是包括了一些列Task的并行计算。一般需要Action触发。Action不会产生RDD。Action前面有RDD,是transfoemation,是lazy级别的。

Spark快不是因为基于内存。最基本是调度,然后是容错,才是精髓,还有其它好多内容。

窄依赖,除了一对一,range级别的,固定个数,不会随着规模的大小而变化,比如原来3个,就算加到100台,还是3个MapPartitionRDD。

Stage内部计算逻辑完全一样,只是计算的数据不同罢了。这就是分布式并行计算,是大数据的基本精髓点。

一个Partition是不是固定128M?不是,因为最后的一条数据跨两个Block。

一个application里面可以有多个jobs,一般一个action操作对应一个job。其它情况比如checkpoint也会导致job。

==========Spark内核架构解密绘图============

~~~1、Driver~~~

专门提交Spark程序的机器(Driver,它的核心是SparkContext),这台机器一定和Spark Cluster在同样的网络环境中,且其配置和普通的Worker一致。因为会不停的交互,所以网络在一起。该机器可能会有其它企业级的J2EE程序等。这个机器有appication、各种依赖的外部资源(例如.so、file等等)。在此基础上,使用spark-submit来运行,可以配置各种运行时的参数,比如memory、cores等等。实际生产环境下不会手工spark-submit来运行,一般会写脚本,用crontab自动化配置和提交程序。提交Spark程序的机器,必须要安装Spark,只不过是这里安装的Spark不属于集群!!!Driver单列的时候一般不做HA,但是Master形式的时候,用--supervise模式,它会自动启动Driver。

(Spark程序的运行有两种模式,client模式和cluster模式,默认建议使用client模式,因为可以看到很多日志信息,但是实际运用,Cluster)

之前写程序提交给Master,因为现在只有3台机器,所以,一般Driver和Worker是分开的。

~~~2、SparkContext~~~

最重要做三件事情:创建DAGScheduler、TaskScheduler、SchedulerBackend

在实例化的的过程Register当前的程序给Master,Master接受注册,如果没有问题,Master会为当前程序分配AppID并分配计算资源

~~~3、SparkCluster~~~

Master接受当前用户提交的作业,给Worker为当前程序的资源,每个Worker所在节点默认为当前程序分配一个Executor,在Executor中通过线程池并发执行

slaves老师机器配置的Worker1、2、3、4就是这个意思

我的配置的是Master、Woker1、2,因为我的电脑配置低

Master分配多少资源来源:1、spark-env.sh和spark-defaults.sh设置的参数;2、submit提供的参数;3、程序中SparkConf提供的参数

Worker通过一个Proxy为ExecutorRunner的对象实例远程启动ExecutorBackend

ExecutorBackend里面有Executor的线程池ThreadPool

实际在工作的时候会通过TaskRunner来封装Task

TaskRunner是一个runner的接口,然后从ThreadPool中获取一条线程执行Task,执行完后,线程被回收复用

上面就是分配资源的部分,然后通过Action来触发Job,这个时候DAGScheduler登场了

~~~4、Job~~~

一般情况下当通过Action触发Job时,SparkContext会通过DAGScheduler来把Job中的RDD构成的DAG划分成不同的Stage,每个Stage内部是一系列内部逻辑完全相同,但是处理数据不同的Tasks构成了TaskSet

~~~5、TaskScheduler ~~~

TaskScheduler和SchedulerBacked具体Task运行(遵循数据本地性)

~~~5、Task类型~~~

最后Stage的Task称为ResultTask,产生Job结果

其它前面的Stage的Task都是ShuffleMapTask为下一阶段的Stage做数据准备,相当于MapReduce的Mapper,知识 是更精致和高效的实现

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

王家林老师名片:

中国Spark第一人

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

微信公众号:DT_Spark

博客:http://blog.sina.com.cn/ilovepains

手机:18610086859

QQ:1740415547

邮箱:[email protected]

时间: 2024-08-05 02:31:53

Spark内核架构解密(DT大数据梦工厂)的相关文章

Spark天堂之门(SparkContext)解密(DT大数据梦工厂)

内容: 1.Spark天堂之门: 2.SparkContext使用案例鉴赏: 3.SparkContext内幕: 4.SparkContext源码解密: SparkContext是编写任意Spark程序的第一个对象,用SparkConf为传入的参数 ==========Spark天堂之门:SparkContext !!!============ 1.Spark程序在运行的时候分为Driver和Executors: 2.Spark程序编写是基于SparkContext的,具体来说包含两个方面: 1

Spark on Yarn彻底解密(DT大数据梦工厂)

内容: 1.Hadoop Yarn的工作流程解密: 2.Spark on Yarn两种运行模式实战: 3.Spark on Yarn工作流程解密: 4.Spark on Yarn工作内幕解密: 5.Spark on Yarn最佳实践: 资源管理框架Yarn Mesos是分布式集群的资源管理框架,和大数据没关系,但是可以管理大数据的资源 ==========Hadoop Yarn解析============ 1.Yarn是Hadoop推出的资源管理器,是负责分布式(大数据)集群计算的资源管理的,负

Spark Sort-Based Shuffle内幕彻底解密(DT大数据梦工厂)

内容: 1.为什么使用Sorted-Based Shuffle: 2.Sorted-Based Shuffle实战: 3.Sorted-Based Shuffle内幕: 4.Sorted-Based Shuffle的不足: 最常用的Shuffle方式,Sorted-Based Shuffle涉及了大规模Spark开发.运维时核心问题,以及答案的要害所在. 必须掌握这一讲内容. 本课是从Spark初级人才成功升级为Spark中级人才的通道. 稍有水平的大公司,面试内容本讲肯定会涉及. ======

SparkRDD解密(DT大数据梦工厂)

第一阶段,彻底精通Spark 第二阶段,从0起步,操作项目 Hadoop是大数据的基础设施,存储等等 Spark是计算核心所在 1.RDD:基于工作集的应用抽象 2.RDD内幕解密 3.RDD思考 不掌握RDD的人,不可能成为Spark的高手 绝对精通RDD,解决问题的能力大大提高 各种框架底层封装的都是RDD,RDD提供了通用框架 RDD是Spark的通用抽象基石 顶级SPark高手, 1.能解决问题.性能调优: 2.Spark高手拿Spark过来就是修改的 ==========基于工作集的应

Spark高级排序彻底解密(DT大数据梦工厂)

内容: 1.基础排序算法实战: 2.二次排序算法实战: 3.更高局级别排序算法: 4.排序算法内幕解密: 为啥讲排序?因为在应用的时候都有排序要求. 海量数据经常排序之后要我们想要的内容. ==========基础排序算法============ scala> sc.setLogLevel("WARN") scala> val x = sc.textFile("/historyserverforSpark/README.md", 3).flatMap(_

Spark Runtime(Driver、Masster、Worker、Executor)内幕解密(DT大数据梦工厂)

内容: 1.再论Spark集群部署: 2.Job提交解密: 3.Job的生成和接受: 4.Task的运行: 5.再论Shuffle: 从一个作业视角,透过Master.Drvier.Executor来透视Spark Runtime ==========再论Spark集群部署============ 官网中关于集群的部署: 默认情况下,每个Worker下有一个Executor,会最大化的使用内存和CPU. Master发指令给Worker来分配资源,不关心Worker能不能分配到这个资源,他发给多

Spark Executor内幕彻底解密(DT大数据梦工厂)

内容: 1.Spark Executor工作原理图: 2.ExecutorBackend注册源码解密: 3.Executor实例化内幕: 4.Executor具体是如何工作的? 1.Master发指令给Worker启动Executor: 2.Worker接受到Master发送来的指令,通过ExecutorRunner启动另外一个进程来运行Executor: 3.此时会启动粗粒度的ExecutorBackend(CoarseGrainedExecutorBackend): 4.CoarseGrai

Master HA彻底解密(DT大数据梦工厂)

内容: 1.Master HA解析: 2.Master HA的四种方式: 3.Master HA的内部工作机制: 4.Master HA的源码解密: 本讲主要源码角度分析Master HA,因为在生产环境必然要做的 ==========Master HA解析============ Spark是Master-Slave的结构 现在业界是1个Master Active,2个以上standby 如果有HA的话,切换active的时候,会在上次运行的基础上继续运行 Drvier提交程序.申请资源,是跟

DT大数据梦工厂Spark机器学习相关视频资料

大数据未来几年发展的重点方向,大数据战略已经在十八届五中全会上作为重点战略方向,中国在大数据方面才刚刚起步,但是在美国已经产生了上千亿的市场价值.举个例子,美国通用公司是一个生产飞机发动机的一个公司,这家公司在飞机发动机的每一个零部件上都安装了传感器,这些传感器在飞机发动机运作的同时不断的把发动机状态的数据传到通用公司的云平台上,通用公司又有很多数据分析中心专门接受这些数据,根据大数据的分析可以随时掌握每一家航空公司发动机的飞行状况,可以告知这些航空公司发动机的哪些部件需要检修或保养,避免飞机事