Spark系列(三)Spark的工作机制

什么时候才能回归到看论文,写感想的日子呀~刚刚交完房租的我血槽已空。看了师妹关于Spark报告的PPT,好怀念学生时代开组会的时光啊,虽然我已经离开学校不长不短两个月,但我还是非常认真的翻阅了,并作为大自然的搬运工来搬运知识了。

Spark的执行模式

1、Local,本地执行,通过多线程来实现并行计算。
2、本地伪集群运行模式,用单机模拟集群,有多个进程。
3、Standalone,spark做资源调度,任务的调度和计算。部署繁琐。

4、Yarn, Mesos,通用的统一资源管理机制,可以在上面运行多种计算框架。

着重介绍比较广泛应用集群管理器Yarn

YARN 是在 Hadoop 2.0中引入的集群管理器,它可以让多种数据处理框架运行在一个共享的资源池上,并且通常安装在与 Hadoop 文件系统(简称 HDFS)相同的物理节点上。

第一步是找到你的 Hadoop 的配置目录,并把它设为环境变量HADOOP_CONF_DIR。这个目录包含 yarn-site.xml 和其他配置文件;如果你把 Hadoop 装到 HADOOP_HOME 中,那么这个目录通常位于HADOOP_HOME/conf 中,否则可能位于系统目录 /etc/hadoop/conf中。然后用如下方式提交你的应用:
export HADOOP_CONF_DIR="..." 
spark-submit --master yarn yourapp

有两种将应用连接到集群的模式:客户端模式以及集群模式。在客户端模式下应用的驱动器程序运行在提交应用的机器上(比如你的笔记本电脑),而在集群模式下,驱动器程序也运行在一个 YARN 容器内部。这就涉及了应用的两种提交方式。

应用的提交方式

Driver运行在客户端,即为客户端模式

Spark系列(三)Spark的工作机制

Driver运行在集群上,是集群中的某一个Worker,即集群模式

Spark系列(三)Spark的工作机制

执行流程

Spark系列(三)Spark的工作机制

基于上图我们将详细介绍资源的调度和任务的分配,主要从Application的调度-Job调度-Stage调度来说明

Application的调度

多用户需要共享集群资源时,可以依据集群管理者的配置,分配资源

YARN:配置每个应用分配的executor数量,每个executor占用的的内存大小和CPU核数

Job的调度
Job的调度符合FIFO, 调度池里面是很多任务集,任务集有两个ID ,JOBID 和stageID,ID小的先执行。 JOB: FIFO

stage:  DAGScheduler

Stage的调度

Stage的DAG以最后执行的 Stage为根进行广度优先遍历,遍历到最开始执行的Stage执行。DAGScheduler中还维持了几个重要的Key-Value集 :

waitingStages中记录仍有未执行的父Stage,防止过早执行;

runningStages中保存正在执行的Stage,防止重复执行;

failedStages中保存执行失败的Stage,需要重新执行。

DONE