基于YARN的SPARK管理过程
前言
MapReduce与Spark中Job概念的区别
在MapReduce中的一个抽象概念是Job,在Job执行时系统会加载数据,然后执行Map, Shuffle, Reduce等操作,再对结果进行持久化。
在Spark中则是有Application,一个Application下面有多个Job,多个Job可以并行也可以串行,一个Job由多个Stage组成。
Spark执行过程中各组成部分介绍
Application
一个Application与Spark API接口中的一个SparkContext相对应(目前有更高级的抽象SparkSession封装着SparkContext)。
一个Application可以用于:
- 一批Job(如:一个包含SparkContext的脚本,在限定时间内执行完成)
- 一个有多个Job的交互式会话(如:Spark Shell)
- 一个长期存活的Server程序(如:带SparkContext,死循环接收Spark任务的Server脚本)
Application在Spark集群中会拥有执行进程,称为Executors。Executors即便在没有Job可运行的情况下也会运行在集群中。
Job
一个Job则拆分成不同的stage。
** Stage**
一个Stage则包含Map, Shuffle, Reduce等操作。一个Stage可进一步细化为一系列Task。
Task
一个Stage细化为一系列Task,这些Task都执行相同的代码,只是执行在输入数据集上的不同部分。
Executors
在MapReduce中每个Task运行在各自的进程中,当Task结束的时候,杀掉进程。
在Spark中多个Task可以并行的运行在一个进程中,即Executor。这个进程即便在没有Job可运行的情况下也会运行在集群中,生命周期与Application一样长。(好处是调用速度快,坏处是资源利用率不高)
一个节点中可以有多个Executor。
Driver
Driver进程负责运行Spark Context,将Application转化为DAG图,以及初始化Job。
Driver与Application一一对应。
Resource Management
Spark支持三种类型集群管理方式:YARN, Mesos, Standalone
三种方式都由两部分组成:
- Central Master Service:<u>YARN ResourceManager</u>, <u>Mesos Master</u>, <u>Spark Standalone Master</u>
- Slave Service:<u>YARN NodeManager</u>, <u>Mesos Slave</u>, <u>Spark Standalone Slave</u>
Central Master Service用于决定Applications的运行时机、地方。
Slave Service运行在各个节点 ,真正的启用Executor进程。有时会监测Executor的是否活着,还有其资源消费情况。
基于YARN的Spark资源管理
YARN结合Spark运行方式简介
一个Spark Executor以一个YARN Container的形式运行。Spark在一个Container中持有多个Task。
Spark支持两种运行在YARN上的方式:"yarn-cluster", "yarn-client"
YARN Cluster模式
一个Application实例对应一个Application Master进程,也是运行在一个YARN Container中,并且是第一个Container。
Application Master负责从Resource Manager处获取资源(合适的Hosts和Containers),再通知NodeManagers启动Containers。
YARN Client模式
Application Master只负责从Resource Manager处获取资源。由Client与各个Container进行通信确认如何工作。
YARN Cluster模式与Client模式的区别
||YARN Cluster|YARN Client|
|:---|:---|:---|
|Driver runs in|Application Master|Client|
|Who controls running process|Application Master|Client|
|Spark interactively, like spark-shell|No|Yes|
|Spark driver run inside client process (initiates the Spark Application)|No|Yes|
参考文献
[1] http://blog.cloudera.com/blog/2014/05/apache-spark-resource-management-and-yarn-app-models/
[2] http://blog.cloudera.com/blog/2015/03/how-to-tune-your-apache-spark-jobs-part-1/
[3] https://spark.apache.org/docs/1.0.2/job-scheduling.html