核心概念:
Application
基于Spark的用户程序,包含了driver程序和集群的executor
Driver Program
运行main函数并且新建SparkContext的程序
Executor
在一个work node上为某应用启动的一个进程,负责运行任务。
Cluster Manager
在集群上获取资源的外部服务,standalone,Mesos,Yarn
Worker node
集群上可以运行应用代码的节点
Task
被送到某个Executor上的工作单元
Job
包含很多任务的并行计算,可以看做是Spark和action
Stage
一个job会被拆成多个任务
Master(standalone):资源管理的主节点(进程)
Cluster Manager:在集群上获取资源的外部服务(例如standalone,Mesos,Yarn )
Worker Node(standalone):资源管理的从节点(进程) 或者说管理本机资源的进程
Application:基于Spark的⽤用户程序,包含了driver程序和运行在集群上的executor程序
Driver Program:用来连接工作进程(Worker)的程序
Executor:是在一个worker进程所管理的节点上为某Application启动的⼀一个进程,该进
程负责运行任务,并且负责将数据存在内存或者磁盘上。每个应⽤用都有各自独⽴立的
executors
Task:被送到某个executor上的工作单元
Job:包含很多任务(Task)的并行计算,可以看做和action对应
Stage:⼀个Job会被拆分很多组任务,每组任务被称为Stage(就像Mapreduce分map task
和reduce task一样)
总结
一个application包含driver和executor,可以包含多个job(由action触发job),每个job可以根据拆成多个stage(根据宽依赖拆分),每个stage又会有一组task,这组task会发到worker node上去运行,运行的时候会启动executor。
stage的task数由stage最后一个task的分区数决定(也是这个stage的并行度)。
每个task的计算逻辑,就是一个pipline(处理数据就跟流水线作业一样)
pipline什么时候落地磁盘?
1.shuffle write阶段
2.如果对某一个RDD执行了持久化。
application组成
![a25bd7b94bc12741826249181d489fc8.png](https://i-blog.csdnimg.cn/blog_migrate/5ecdf683f9c0a422b1370aba14e8e38a.jpeg)
Spark运行架构解析
![5f0fb41609c32d3a8d221614ac1b7c49.png](https://i-blog.csdnimg.cn/blog_migrate/2cb962d6b8cf9e9fbe0644b3a5e6d23a.jpeg)
RDD遇到宽依赖时会shuffle,以shuffle为边界划分stage
![af7d7f1699010f90d0eda605cb1e0a14.png](https://i-blog.csdnimg.cn/blog_migrate/e0b8605260f0cded5ca6184ca48b4612.jpeg)
![104da1496b581be0ee3d4076f2c3fdd6.png](https://i-blog.csdnimg.cn/blog_migrate/61087903e7df94550e959985e7e52aa1.jpeg)
运行过程
SparkContext向集群申请资源,集群分配资源,执行excutor,驱动程序将Spark应用程序的相关代码文件传给excutor,在excutor上启动task,task执行完成之后向driver返回结果或直接写到外面的原生数据里面。
总结就是:
application向集群注册,申请资源,将代码发送到各个节点,在节点上运行各个task
![0d26f29a774d7002527c0074aed99a1d.png](https://i-blog.csdnimg.cn/blog_migrate/4bb0867f8aed73cbc4e25d2c439d18a1.jpeg)
![24111c2b7af423d342fc9fcf9329d64a.png](https://i-blog.csdnimg.cn/blog_migrate/02c3ed4dbc7ea0d832baa8b6fd4f165f.jpeg)
DAGScheduler
![346a3003aecda19865886e6058bcdba1.png](https://i-blog.csdnimg.cn/blog_migrate/880a8b3260397c30adb385edf8a6bc41.jpeg)
TaskSchedule
根据运行时间跟最佳位置决定task放到哪个位置运行
![620b43e57d2113688c84869968b3a6e2.png](https://i-blog.csdnimg.cn/blog_migrate/57c6a9df01efa129010c630e3a70c441.jpeg)
![32d8de862bdeb73896b813f6da91fb24.png](https://i-blog.csdnimg.cn/blog_migrate/3dc38655a5443ed0972b6de28a162d4f.jpeg)
集群架构
Local模式
本地模式,默认情况是本地运行模式。
./sbin/spark-submit.sh --master local[4]
![3c30b60051db919d63f0320289848ed9.png](https://i-blog.csdnimg.cn/blog_migrate/dc7c8f8bd178d07f09738162e84a64f6.jpeg)
![de9f0d000d97e1153780efd726820e2e.png](https://i-blog.csdnimg.cn/blog_migrate/37122546cd3c9dd52aa6d365227eef59.jpeg)
standalone模式
![75e895d653c2c597f8bd980267858403.png](https://i-blog.csdnimg.cn/blog_migrate/d4156a9fa5ec786a7104eb2dce45aa21.jpeg)
standalone详细过程
![249d65ace9da010b44109a7eaa82b26c.png](https://i-blog.csdnimg.cn/blog_migrate/ccc3aa841551b3c54793ba018d227186.jpeg)
Spark On Yarn架构解析
为什么YARN
共享资源,方便集群管理
回顾基本流程
![60818443b3310551f6b39899e52b60d7.png](https://i-blog.csdnimg.cn/blog_migrate/031fe02c1dc8f3192299b7bb2450c9d2.jpeg)
Yarn cluster
Yarn standalone是0.9之前版本的叫法,1.0开始更名为Yarn cluster
Driver和AM是一起的,client是单独。
![a371d1da8b16a95a6395ff0fe38a6e7b.png](https://i-blog.csdnimg.cn/blog_migrate/24fe178803944e8e3e1360135f263437.jpeg)
Spark Driver首选作为一个ApplicationMaseter在Yarn集群中启动,客户端提交给ResourceManger的每个job都会在集群的worker节点上分配一个唯一的AM。
由该AM管理权生命周期的应用。因为Dviver程序在Yarn中运行,所以事先不用启动Spark Master/Client,应用程序的运行结果不能在客户端显示(可以在history server中查看)
![a64a89304683244e4e053e17feb96d37.png](https://i-blog.csdnimg.cn/blog_migrate/fd4c7f4653c52b41e7a0c32eebb4ea02.jpeg)
Yarn client
client和Driver在一起(运行在本地)AM只用来管理资源。
默认是client模式
![94c16f64c6ce66c62be5eb9e345ef65a.png](https://i-blog.csdnimg.cn/blog_migrate/72cb4d4bbd650b201f73983de4266d07.jpeg)
在yarn-client模式下,Driver运行在client上,通过AM向RM获取资源。本地Driver负责与所有的executor container运行交换,并将结果汇总,结束掉终端,相当于kill掉这个spark应用,一般来说,如果运行结果仅仅返回到terminal的时候需要配置这个。
![ee4830a8d6e5901d00d55e9569c99a4e.png](https://i-blog.csdnimg.cn/blog_migrate/433f6272d4fb6dcb121979b9702f4504.jpeg)
如何选择
运行结果希望终端可看,用client模式
运行结果过大,client看不了,用custer模式
数据存储到hdfs的建议用cluster
补:YARN
1.YARN概述
Apache Hadoop YARn 是一种新的Hadoop资源管理器,它是一个通用的资源管理系统,,可为上层应用提供统一的资源管理和调度。
2.Spark on Yarn配置部署
3.Spark on Yarn运行架构解析
4.其他配置和注释事项
Yarn在Hadoop生态中的位置
![ddbac415218f4bb5a421e503d3c2601b.png](https://i-blog.csdnimg.cn/blog_migrate/1d6b802b7cf1b0ee3a7086a5fbb81745.jpeg)
Yarn产生背景
随着互联网的告诉发展,数据急剧增加,Mapreduce这种基于磁盘的离线计算框架已经不能满足应用要求,从而出现一些新的计算框架,应对各种场景,包括内存计算框架,流式计算框架和迭代计算框架,而MRv1不能支持多种计算框架并存。
YARN基本架构
![2dee073a4f867eb8c4799d5b4de04fe4.png](https://i-blog.csdnimg.cn/blog_migrate/4621ec163c2741557039727c04aab763.jpeg)
ResouceManager(RM)
ResouceManager负责集群资源的统一管理和调度,承担JobTracker的角色,整个集群只有一个可用状态。
1.处理客户端请求
2.启动或监控ApplicationMaster
3.监控NodeManger
4.资源的分配与调用
NodeManger(NM)
NodeManger管理YARN集群中的每个节点,NodeManger提供针对集群中每个节点的服务,从监督对一个容器的终身管理到监事资源和跟踪节点管理抽象容器,这些容器代表着可供一个特定应用程序使用的针对每个节点的资源,NM有以下作用:
1.管理单个节点上的资源
2.处理来自RM的命令
3.处理来自ApplicationMaster的命令
ApplicationMaster(AM)
每个应用有一个,负责应用程序管理。
ApplicationMaster负责协调来自RM的资源,并通过NM监事容器的执行和资源使用(CPU核心,内存),但未来会带来机遇手头任务的新资源类型(比如图形处理单元或专用处理设备),AM有以下作用:
1.负责数据的切分
2.为应用程序申请资源并分配给内部的任务
3.任务的监控与容错
Container
Container是YARN中的资源抽象,它封装了讴歌节点上的多维资源,如内存,磁盘,CPU,网络等,当AM向RM申请资源时,RM为AM返回的资源便是用Container表示的。YARN会为每个任务分配一个Container,且该任务只能使用该Container的资源,Container有以下作用:
1.对任务运行环境进行抽象,封装CPU,内存,等多维度的资源以及环境变量,启动没拿过来的任务运行的相关信息。