spark学习之spark基本架构和运行模式(初初级)

一 spark的基本架构

Cluster Manager:用来管理资源,随着资源管理者身份的不同而改变,在standalone 模式中即为Master主节点,控制整个集群,监控worker。在YARN模式中为资源管理器

Worker节点:从节点,负责控制计算节点,启动Executor或者Driver。

Driver: 程序入口,负责申请资源和后续整个application执行的管理

Executor:执行器,是为某个Application运行在worker node上的一个进程

Task:application的最小执行单元

这是官网的架构图

注意:
(1)每个应用程序都获得自己的执行进程,这些进程在整个应用程序的持续时间内保持不变,并在多线程中运行任务。这有利于在调度方(每个驱动程序安排自己的任务)和执行方(在不同JVM中运行的不同应用程序的任务)之间彼此隔离应用程序。但是,这也意味着数据在不写入外部存储系统的情况下在不同的Spark应用程序(SparkContext的实例)之间不能共享。

(2)Spark与底层集群管理器无关。只要可以获取执行程序进程,并且这些进程彼此通信,即使在也支持其他应用程序(例如Mesos / YARN)的集群管理器上运行它也是可以的。

(3)驱动程序必须在其生命周期中监听并接收其执行器的传入连接,因此,驱动程序必须能够从worker进行网络寻址。

(4)因为驱动程序调度集群上的任务,所以它应该靠近worker运行,最好在相同的局域网上运行。如果要远程发送请求到集群,最好是向驱动程序打开一个RPC,并从附近提交操作,而不是从远离worker的机器上运行驱动程序。

二 spark的运行模式

(1) local模式(本地模式)

local模式主要是开发时候用来验证开发的application逻辑是否错误,使用多个线程模拟spark的分布式计算,在提交任务的时候,不写默认为local模式。

(2) standalone模式(独立模式) 

本地模式,主要是资源自己管理,也就是说master充当clustermanager的角色,负责整个集群的资源调度及管理。

以下是提交任务时候的一些参数

./bin/spark-submit \
–class org.apache.spark.examples.SparkPi \
–master yarn \
–deploy-mode cluster \
–executor-memory 1G \
–num-executors 1 \
/path/to/examples.ja

我们可以在master那更改选择使用哪种模式,standalone模式还分为cluster模式和client模式,二者区别主要是driver的位置不同,使用client的模式,driver会随着application的提交启动在客户端,它的好处在于生成的日志信息详细,它的坏处在于任务多的时候启动的driver也多,集中在client上导致client压力太大,而cluster模式会将driver启动在一台资源不紧张的worker上,所以cluster更适用与正式运行代码,而client适合用于调试代码。

(3)yarn模式

yarn模式就是使用yarn资源管理系统充当clustermanager,负责整个集群的资源管理,yarn模式也分cluster模式和client模式,和(2)描述一致。

在yarn模式下简单的执行流程:

1)在客户端提交代码,有客户端向resourcemanager进行注册

2)resourcemanager会启动一个applicationmaster进程和一个driver进程,启动
driver也就意味着启动了DAGScheduler和TaskScheduler。

3)driver会通过applicationmaster间接的向resourcemanager申请程序执行所需要的资源,

4)resourcemanager接收到申请后会返回container(里面放的都是资源--钱)

5)从container里启动executor,然后executor向driver反向注册,告诉driver自己的信息

6)driver每遇到一个action就创建一个Job任务,会把创建的这个Job任务提交给DAGScheduler,DAGScheduler会把这个Job任务划分成为多个stage,会为每个stage创建一个TaskSet的集合。TaskScheduler会把TaskSet集合里面的每个task对象发送给Executor。Executor接收到task,都会启动一个TaskRunner去封装这个task,然后把task丢到线程池里面去运行。

(4) mesos模式

mesos也是一个资源调度系统。是spark自家的

在mesos上的执行流程

1)通过spark-submit提交任务到spark-mesos-dispatcher

2)spark-mesos-dispatcher 把通过driver 提交到mesos master,并收到任务ID

3)mesos master 分配到slaver 让它执行任务

4) spark-mesos-dispatcher,通过任务ID查询任务状态

猜你喜欢

转载自blog.csdn.net/weixin_39627946/article/details/78346891
今日推荐