概述
Spark应用作为一组进程运行在集群上,这组进程由主进程启动(包含main函数的进程),主进程中含有一个SparkContext,来协调这组进程之间的调度关系。在集群上运行Spark应用的时候,SparkContext可以使用多个ClusterManager(Yarn、Mesos、Spark自带的Master)。ClusterManager用来维护集群中的资源(Executor).SparkContext与ClusterManager建立连接之后,就会向ClusterManager申请集群中用于执行任务的空闲Executor。申请到Executor后,SparkContext把代码发给Executor(Spark应用的代码),然后把任务发给Executor让Executor执行*从上面的描述可以知道,ClusterManager负责的事情是资源的管理与分配,当有Spark应用程序要执行的时候,SparkContext负责把应用程序拆解为任务DAG,同时确定需要的资源,然后向ClusterManager申请资源,资源申请到后,哪个Executor上执行DAG中的哪个任务,还是SparkContext来负责的工作。ClusrerManager的职责就是维护集群内的计算资源*下图描述了Spark应用在执行时资源的申请关系以及任务的分配关系
更多
下面的几点补充信息可以帮助我们了解更多
1. 每个Spark应用有自己的Executor进程,每个Executor进程内,执行多个任务线程(任务是拆解Spark应用后分解出的DAG的所有节点)。这样做对不同任务之间的数据隔离很有效。同时这也说明,一个Spark集群在同一时刻,是可以支持多个Spark应用的,但是多个Spark应用互相之间不能直接通过Spark集群来共享数据,除非他们都使用了同一个外部存储。
2. ClusterManager其实并不知道Spark的存在,ClusterManager只负责分配资源。所以Spark可以和其他的应用共享ClusterManager(典型的就是YARN)
3. Driver Program必须在整个Spark应用的生命周期内都和Worker节点通信,以便控制整个Spark应用的执行过程。所以,这个节点必须可以和所有Worker进行网络通信。
4. Driver Program所在的机器和Worker节点,最好在一个内网里。如果需要远程启动Driver Program则最好开启RPC
ClusterManager类型
目前Spark支持3中ClusterManager1. Stand a lone2. Yarn 3. Mesos#监控每一个Driver Program都有一个自己的WEB UI,用来查看当前应用中的所有任务执行情况,Executor的状态,本地存储的使用情况等信息。默认端口是4040,http://:4040。更多监控信息,可以查看这里
任务调度
todo
词汇表
Application : Spark应用
Application jar:Spark应用Jar包,包含Sprak应用的jar包,有些时候我们提交的jar中除了自己的代码,还要有一些依赖的jar(注意不要把依赖的hadoop和spark的jar打包进来,因为集群中已经有了),在运行时这个jar中的所有类都会别加载到Driver Program的主程序中|
Driver program:运行main函数的主应用程序,它内部创建了SparkContext|
Cluster manager:外部的集群资源管理器,比如 stand a lone manager, yarn, mesos|
Deploy mode:部署模式这个模式表示Dirver Program的运行位置。在 cluster 模式下,Driver Program在集群内的机器上运行。在 client 模式下,Driver Program在提交任务的那台集群上运行
Worker Node:集群中的一台机器(slaver)就是一个WorkerNode
Executor:为一个Spark应用在Worker Node上启动的一个进程,它执行任务,在自己的内存里保存数据,也可以把数据保存到磁盘以便让当前应用内的其他Executor使用。每个应用有它自己的Executor(由Cluster Manager分配的)
Task:任务 Spark应用被拆解的最小执行单元,会被SparkContext发送到一个Executor上去执行
Job:一个包含多个任务(task)的可以并行执行的计算过程,一般情况下由一个Spark Action来生成,比如 save或者collect
Stage:一个Spark应用被分为了多个阶段。每个阶段是一个Stage,Stage之间是有依赖关系的
网友评论