Spark集群架构原理

Spark集群分类

Spark集群分为独立集群模式和yarn模式,独立集群模式即Standalone模式,是Spark自带的一种集群模式,它的架构是Master-Worker架构。yarn模式是借助Hadoop的yarn资源管理运行的一种集群模式,yarn模式还细分为yarn-cluster模式和yarn-client模式。

Standalone模式架构原理

standalone模式下,spark-submit提交作业时,通过反射机制创建和构造一个Driver Actor进程出来,该进程用于构建SparkConf和SparkContext。

Spark Context在初始化的时候,最重要的两件事就是构造DAGScheduler和TaskScheduler。即SparkContext包含DAGScheduler和TaskScheduler。
TaskScheduler通过它对应的一个后台进程去连接Master,向Master注册Application,Master收到Application注册请求后,会使用自己的资源调度算法,在Spark集群的worker上为这个Application启动多个executor。(一个worker可以创建多个executor)。worker将按照Master的调度创建自己的executor(一个执行进程)。创建好后,executor自己反向注册到TaskScheduler上去。至此,SparkContext构建完成。
程序每执行一个Action,就会创建一个Job,该Job将提交给DAGscheduler,DAGScheduler会将job划分为多个stage(此处涉及到划分算法),每个stage创建一个TaskSet,TaskSet将送往TaskScheduler。TaskScheduler会把TaskSet里每个Task提交到executor上执行(此处涉及到task分配算法),executor每接收到一个Task,都会用TaskRunner来封装task,然后从线程池中取出一个线程,执行该task.
TaskRunner:将代码,即执行的算子及函数拷贝和反序化,然后执行Task。Task有两种:ShuffleMapTask和ResultTask。所有Stage中,只有最后一个Stage是ResultTask,前面的均是ShuffleMapTask。

所以,整个Spark应用程序的执行,就是Stage分批次作为taskset提交到executor执行每个Task。针对RDD的一个partition,执行定义的算子和函数,以此类推,直到所有操作执行完为止。

yarn-cluster模式

1、spark-submit提交作业(yarn-cluster),发送请求到ResourceManager,请求启动ApplicationMaster。
2、ResourceManager分配container,在某个nodemanager上启动ApplicationMaster(相当于Driver)。
3、ApplicationMaster找RM,请求container,启动executor。
4、RM为AM分配一批container,用于启动executor。
5、AM连接其他NM,来启动executor,这里的NM相当于Worker。
6、executor启动后,向AM反向注册。

后续的Task分配与standalone模式一样。

yarn-client模式

1、spark-submit提交作业到RM
2、RM分配一个container,在某个NM上启动AM(此处的AM不同于yarn-cluster下的AM,此处AM实质是一个executorLanucher)
3、AM向RM申请container,启动executor。
4、RM向AM分配一批container,用于启动executor。
5、AM连接其他NM,用container资源启动executor。
6、executor启动后,各NM上的executor反向注册到本地的Driver上。
后续的Task分配和Standalone模式一样


yarn-cluster于yarn-client模式的区别

yarn-cluster中的AM充当了Driver的角色,而yarn-client模式中的AM仅用于申请executor资源(executorLanucher)。
yarn-cluster中各NM中的executor向AM反向注册,而yarn-client模式中各NM中的executor向本地Driver反向注册。(实质仍是向Driver反向注册,只是两种模式下Driver位置不一样而已)

猜你喜欢

转载自blog.csdn.net/zhouzhuo_csuft/article/details/80876604