美文网首页
Spark on yarn、Spark基础认知

Spark on yarn、Spark基础认知

作者: Phoebe_Liu | 来源:发表于2019-04-03 14:42 被阅读0次

一、YARN是集群的资源管理系统

1、ResourceManager:负责整个集群的资源管理和分配。
2、ApplicationMaster:YARN中每个Application对应一个AM进程,负责与RM协商获取资源,获取资源后告诉NodeManager为其分配并启动Container。
3、NodeManager:每个节点的资源和任务管理器,负责启动/停止Container,并监视资源使用情况。
4、Container:YARN中的抽象资源。

二、 SPARK的概念

1、Driver:和ClusterManager通信,进行资源申请、任务分配并监督其运行状况等。运行程序的main方法,创建spark context对象。具体的:1)driver是作业的主进程,具有main函数,并且有SparkContext的实例,是程序的人口点;2)功能:负责向集群申请资源,向master注册信息,负责了作业的调度,,负责作业的解析、生成Stage并调度Task到Executor上。包括DAGScheduler,TaskScheduler。
2、ClusterManager:这里指YARN。
3、DAGScheduler:把spark作业转换成Stage的DAG图。
4、TaskScheduler:把Task分配给具体的Executor。
5、一个application对应一个sparkcontext,app中存在多个job,每个job在不同partition上的执行称为task。
6、client:用户提交程序的入口。
7、worker: worker就类似于包工头。主要功能:管理当前节点内存,CPU的使用状况,接收master分配过来的资源指令,通过ExecutorRunner启动程序分配任务。注意:1)worker不会汇报当前信息给master,worker心跳给master主要只有workid,它不会发送资源信息以心跳的方式给mater,master分配的时候就知道work,只有出现故障的时候才会发送资源。2)worker不会运行代码,具体运行的是Executor是可以运行具体appliaction写的业务逻辑代码,操作代码的节点,它不会运行程序的代码的。

三、 SPARK on YARN

1. yarn on cluster

(1)ResourceManager接到请求后在集群中选择一个NodeManager分配Container,并在Container中启动ApplicationMaster进程;
(2)在ApplicationMaster进程中初始化sparkContext;
(3)ApplicationMaster向ResourceManager申请到Container后,通知NodeManager在获得的Container中启动excutor进程;
(4)sparkContext分配Task给excutor,excutor发送运行状态给ApplicationMaster。


yarn_on_cluster.jpg

2. yarn on client

(1)ResourceManager接到请求后在集群中选择一个NodeManager分配Container,并在Container中启动ApplicationMaster进程;
(2)driver进程运行在client中,并初始化sparkContext;
(3)sparkContext初始化完后与ApplicationMaster通讯,通过ApplicationMaster向ResourceManager申请Container,ApplicationMaster通知NodeManager在获得的Container中启动excutor进程;
(4)sparkContext分配Task给excutor,excutor发送运行状态给driver。


yarn on client.jpg

3. 区别

  1. 它们的区别就是ApplicationMaster的区别:yarn-cluster中ApplicationMaster不仅负责申请资源,并负责监控Task的运行状况,因此可以关掉client;而yarn-client中ApplicationMaster仅负责申请资源,由client中的driver来监控调度Task的运行,因此不能关掉client。
  2. client适合调试,dirver运行在客户端; cluster适合生产,driver运行在集群子节点,具有容错功能

四、 job stage task

  1. job : A job is triggered by an action, like count() or saveAsTextFile(). Click on a job to see information about the stages of tasks inside it. 所谓一个 job,就是由一个 rdd 的 action 触发的动作,可以简单的理解为,当你需要执行一个 rdd 的 action 的时候,会生成一个 job。
  2. stage : stage 是一个 job 的组成单位,就是说,一个 job 会被切分成 1 个或 1 个以上的 stage,然后各个 stage 会按照执行顺序依次执行。由job->stage,其划分原则是从宽依赖分隔。因为从宽依赖,所以子RDD的partition会依赖多个父RDD的partition,有些可能就没有准备好,所以进行划分处理。
  3. task : A unit of work within a stage, corresponding to one RDD partition。即 stage 下的一个任务执行单元,一般来说,一个 rdd 有多少个 partition,就会有多少个 task,因为每一个 task 只是处理一个 partition 上的数据。
  4. spark作业提交流程:
    Spark任务会根据RDD之间的依赖关系,形成一个DAG有向无环图,DAG会提交给DAGScheduler,DAGScheduler会把DAG划分相互依赖的多个stage,划分stage的依据就是RDD之间的宽窄依赖。遇到宽依赖就划分stage,每个stage包含一个或多个task任务。然后将这些task以taskSet的形式提交给TaskScheduler运行。
  5. stage切割规则:从后往前,遇到宽依赖就切割stage


    stage_task.png
  6. spark工作机制:
    答:用户在client端提交作业后,会由Driver运行main方法并创建spark context上下文。
    执行add算子,形成dag图输入dagscheduler,按照add之间的依赖关系划分stage输入task scheduler。 task scheduler会将stage划分为task set分发到各个节点的executor中执行。

五、 RDD之间的宽依赖、窄依赖

  1. 窄依赖:表示父亲 RDD 的一个分区最多被子 RDD 一个分区所依赖。有shuffle产生,父RDD的一个分区的数据去到子RDD的不同分区里
    例如:map filter union
  2. 宽依赖:表示父亲 RDD 的一个分区可以被子 RDD 的多个子分区所依赖。没有shuffle产生,父的一个分区数据到了子RDD的一个分区
    例如:groupByKey group sort

相关文章

网友评论

      本文标题:Spark on yarn、Spark基础认知

      本文链接:https://www.haomeiwen.com/subject/teqzbqtx.html