Spark的执行原理,本地Master模式, Yarn_cluster模式运行, Yarn_client模式运行, Yarn_cluster和Yarn_client的区别 14

1. 本地Master负责调度资源

1.1 命令行

bin/spark-submit --class cn.spark.com.WordCountForHDFS \
--master spark:node01:8080 \
--executor-memory 1g \ //每个executor分配1g的内存
--total-executor-cores 4 \ //所有的executor加起来核数是4
/root/spark-root-1.0-SANPSHOT.jar \
/test.txt /out-spark-hdfs123

1.2 执行流程

Spark的执行原理,本地Master模式, Yarn_cluster模式运行, Yarn_client模式运行, Yarn_cluster和Yarn_client的区别 14_第1张图片

  • 通过启动sparkContext(程序运行的main方法).向资源管理器注册, 并申请每个executor执行的内存, 以及总的executor和核数(spark的交互方式), 以下三种模式对应的资源管理器不同
    • master–> master
    • yarn–>resourceManager
    • mesos–>mesos
  • 资源管理器为每个数据的每个分区分配资源,并启动executor, executor汇报资源情况给资源管理器
  • sc 构建DAG–>DAG schedule 切割stages(taskSet)–>TASK schedule–> 提交task(脚本&.jar&参数) -->Executor executor向sc申请task
    • master–>task schedule
    • spark on yarn --> yarnClusterSchedule
  • tasks 在每个分区的executor中运行, 运行完毕释放资源

2. Spark on yarn_cluster模式

2.1 命令行

bin/spark-submit --class cn.spark.com.WordCountForHDFS \
--master yarn-cluster \
--executor-memory 1g \
--total-executor-cores 4 \
/root/spark-root-1.0-SNAPSHOT.jar 
/test.txt /out-spark-hdfs123v

2.2 运行流程

  • application master: SparkContext&executor)运行在application master中
  • application master是nodeManager向resourceManager申请下来的, 启动在nodeManager中.
  • 关闭client, 不影响application的运行
  • resourceManager负责分配资源,application master负责任务的分配
    Spark的执行原理,本地Master模式, Yarn_cluster模式运行, Yarn_client模式运行, Yarn_cluster和Yarn_client的区别 14_第2张图片
  1. Spark Yarn Client向Yarn中提交应用程序, 包括ApplicationMaster程序,启动ApplicationMaster的命令, 需要在Execturo中运行的程序
    也就是Jar包和资源到hdfs
  2. Spark Yarn ClientRescourceManager提交请求.
  3. ResourceManager收到请求后, 在集群中选择一个NodeManager, 申请ApplicationMaster
  4. NodeManager启动ApplicationMaster, 用于分配后续任务的执行
  5. ApplicationMaster启动调度器, DAGSchedulerYarnClousterScheduler, ApplicationMaster调度任务其实本质上是这两个调度器在调度任务.
  6. ApplicationMaster启动后, 向ResourceManager申请Container, Container是真正执行任务的场所.
  7. ResourceManager接到了ApplicationMaster的请求,给NodeManager分配Container.
  8. NodeManager启动申请到的Container.
  9. YarnClousterSchedulerWorker分配工作.
  10. Spark的Worker, 启动Executor, Executor从hdfs上读取分片数据,执行任务.

3. Sparn on Yarn_client

3.1 命令行

bin/spark-submit \
--class cn.spark.com.WordCountForHDFS \
--master yarn_client \
--executor-memory 1g \
--total-executor-cores 4 \
/root/spark-root-1.0-SNAPSHOT.jar \
/test.txt \
/out-spark-hdfs123v

3.2 执行流程图解

  • Yarn_client模式中, Driver在客户端本地运行, 这种模式可以使得Spark Application和客户端进行交互.
  • 因为Driver在客户端, 所以可以通过webUI访问Driver的状态, 默认是http://node01:4040访问, 而Yarn通过http://node01:8088访问.
    Spark的执行原理,本地Master模式, Yarn_cluster模式运行, Yarn_client模式运行, Yarn_cluster和Yarn_client的区别 14_第3张图片
  1. Spark Yarn Client 向 YARN 的 ResourceManager 申请启动 Application Master。同时在 SparkConten始化中将创建 DAGScheduler 和 TASKScheduler 等,由于我们选择的是 Yarn-Client 模式,程序会选YarnClientClusterScheduler 和 YarnClientSchedulerBackend;
  2. ResourceManager 收到请求后,在集群中选择一个 NodeManager,为该应用程序分配第一个 Contain要 求 它 在 这 个 Container 中 启 动 应 用 程 序 的 ApplicationMaster , 与 YARN-Cluster 区 别 的 是 在 ApplicationMaster 不运行 SparkContext,只与 SparkContext 进行联系进行资源的分派;
  3. Client 中的 SparkContext 初始化完毕后,与 ApplicationMaster 建立通讯,向 ResourceManager 注册根据任务信息向 ResourceManager 申请资源(Container);
  4. 一旦 ApplicationMaster 申请到资源(也就是 Container)后,便与对应的 NodeManager 通信,要在获得的 Container 中启动启动 CoarseGrainedExecutorBackend,CoarseGrainedExecutorBackend 启动后会Client 中的 SparkContext 注册并申请 Task;
  5. Client 中 的 SparkContext 分 配 Task 给 CoarseGrainedExecutorBackend 执 行 CoarseGrainedExecutorBackend 运行 Task 并向 Driver 汇报运行的状态和进度,以让 Client 随时掌握各个务的运行状态,从而可以在任务失败时重新启动任务;
  6. 应用程序运行完成后,Client 的 SparkContext 向 ResourceManager 申请注销并关闭自吉己

4. Yarn_client和Yarn_cluster区别

  • 理解Yarn_clientYarn_cluster深层次的区别之前先清楚一个概念: ApplicationMaster. 在Yarn, 每个Appliaction实例都有一个ApplicationMaster进程, 它是Application启动的第一个容器. AppMaster负责和ResourceManager打交道并且申请资源, 获取资源后告诉NodeManager为自己启动Container. 从深层次的含义将Yarn_clusterYarn_client模式的区别其实就是ApplicationMaster进程的区别.
  • Yarn_Cluster模式下,Driver运行在AM(ApplicationMaster)中, AM它负责向Yarn申请资源, 并监督作业的运行状况. 当用户提交了作业之后, 就可以关掉Client, 作业会继续在Yarn上运行, 因而Yarn_cluster模式不适合运行交互类型的作业.
  • Yarn_client模式下, ApplicationMaster仅仅向Yarn请求Executor, Client会和Container通信来调度工作, 因此Client不能关闭.

你可能感兴趣的:(Spark社区)