一. YARN的理解
YARN是Hadoop 2.x版本的产物,它最基本的设计思想是将JobTracker的两个主要功能,即资源管理,作业调度和监控分解成为两个独立的进程。再详细介绍Spark程序工作过程前,先简单的介绍一下YARN,即Hadoop的操作系统,不仅支持MapReduce计算框架,而且还支持流式计算框架,迭代计算框架,MPI并行计算框架等,实现时采用了基于事件的驱动机制。
YARN的架构图,如下所示:
1. ResourceManager
ResourceManager类似JobTracker,包括两个主要的组件:调度器(Scheduler)和应用程序管理器(ApplicationManager)。分别介绍,如下所示:
- Scheduler的主要功能是负责分配资源到各个正在运行的应用程序中,它是基于资源的请求来执行调度功能的。Scheduler是基于Container的抽象概念,包括内存,CPU,磁盘和网络等;
- ApplicationManager的主要功能是负责接送提交的作业,协商第一个执行该任务的Container,并提供失败作业的重启。每个应用的ApplicationMaster负责与Scheduler谈判资源占用的Container数量,追踪状态和监控进程。
2. NodeManager
NodeManager类似TaskTracker,它的主要功能是负责启动Container,监控Container的资源(CPU,内存,磁盘和网络等),并将信息上报给ResourceManager。
二. Spark基本框架
一个Spark应用程序由一个Driver程序和多个Job构成。一个Job由多个Stage组成。一个Stage由多个没有Shuffle关系的Task组成。Spark基本框架,如下所示:
Spark应用程序都离不开SparkContext和Executor两部分,Executor负责执行任务,运行Executor的机器称为Worker节点,SparkContext由用户程序启动,通过资源调度模块和Executor通信。
详细来说,以SparkContext为应用程序运行的总入口,在SparkContext的初始化过程中,Spark会分别创建DAGScheduler作业调度和TaskScheduler任务调度两级调度模块。
作业调度模块是基于任务阶段的高层调度模块,它为每个Spark作业计算具有依赖关系的多个调度阶段(通常根据shuffle来划分),然后为每个阶段构建出一组具体的任务(通常会考虑数据的本地性等),然后以TaskSets(任务组)的形式提交给任务调度模块来具体执行。而任务调度模块则负责具体启动任务、监控和汇报任务运行情况。
三. RDD及其计算方式(Transformation和Action)
四. DAGScheduler作业调度和TaskScheduler任务调度
五. Spark工作过程
参考文献:
[1] YARN简介:http://www.ibm.com/developerworks/cn/data/library/bd-yarn-intro/index.html
[2] Hadoop新MapReduce框架Yarn详解:http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/
[3] Spark应用程序的运行架构:http://blog.csdn.net/hwssg/article/details/38537523
[4] RDD:基于内存的集群计算容错抽象:http://shiyanjun.cn/archives/744.html