spark on yarn client和spark on yarn cluster区别

概述

spark on yarn 的优势是每个Spark executor作为一个Yarn容器(container)运行,Spark可以使得多个Task在同一个容器(container)里面运行;有两种模式:yarn-client和yarn-cluster

  1. yarn-client:driver运行在client端;适用于调式,能直接看到各种日志;连接断了,任务就挂了
  2. driver运行在am中;日志需要登录到某个节点才能看到;client断开,任务不受影响,继续运行

Spark on Yarn的优势

  1. Spark支持动态资源共享,运行于Yarn的框架都共享一个集中配置好的资源池
  2. 可以很方便的利用Yarn的资源调度特性来做分类·,隔离以及优先级控制负载,拥有更灵活的调度策略
  3. Yarn可以自由地选择executor数量
  4. .Yarn是唯一支持Spark安全的集群管理器,使用Yarn,Spark可以运行于Kerberized Hadoop之上,在它们进程之间进行安全认证

名词解释

  1. Application:Application是指用户编写的Spark应用程序,其中包括一个Driver功能的代码和分布在集群中多个节点上运行的Executor代码(1 Diver + n Executor)
  2. Driver:Application的main函数并且创建SparkContext;当Executor部分运行完毕后,Driver同时负责将SparkContext关闭,通常用SparkContext代表Driver
  3. Executor:某个Application运行在worker节点上的一个进程,该进程负责运行某些task,并且负责将数据存到内存或磁盘
  4. Worker:集群中任何可以运行Application的代码节点,Spark on yarn就是NodeManager
  5. Task:被送到某个Executor上的工作单元,即最小执行单元,也就是map…
  6. Job:包含多个Task组成的并行计算,由Spark Action触发,一个Application中会产生多个Job,一个job包含了多个stage
  7. Stage:每个Job会被拆分成多组Task, 作为一个TaskSet, 其名称为Stage,Stage有非最终的Stage(Shuffle Map Stage)和最终的Stage(Result Stage)两种,Stage的边界就是发生shuffle的地方

Job=多个stage,Stage=多个同种task, Task分为ShuffleMapTask和ResultTask,Dependency分为ShuffleDependency和NarrowDependency
在这里插入图片描述

Spark On Yarn注意事项

确保环境变量配置HADOOP_CONF_DIR or YARN_CONF_DIR,也就是需要访问到/etc/hadoop目录,否则报错如下
在这里插入图片描述
提交Job命令如下

spark-submit \
--class com.feidata.bigdata.SparkWC \
--name wc \
--master yarn \
--deploy-mode client \
--jars /home/hadoop/lib/feidata-spark-utils-1.0.jar \
/home/hadoop/lib/feidata-spark-core-1.0.jar \
/wordcount /wordcount/output

yarn-client的工作流程步骤为

  • Driver运行在Client
  • AM职责就是去YARN上申请资源
  • Driver会和请求到的container/executor进行通信
  • Driver是不能退出的

在这里插入图片描述

在这里插入图片描述

  1. Spark Yarn Client向YARN的ResourceManager申请启动Application
    Master。同时在SparkContent初始化中将创建DAGScheduler和TASKScheduler等,由于我们选择的是Yarn-Client模式,程序会选择YarnClientClusterScheduler和YarnClientSchedulerBackend
  2. ResourceManager收到请求后,在集群中选择一个NodeManager,为该应用程序分配第一个Container,要求它在这个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申请注销并关闭自己

因为是与Client端通信,所以Client不能关闭。

客户端的Driver将应用提交给Yarn后,Yarn会先后启动ApplicationMaster和executor,另外ApplicationMaster和executor都 是装载在container里运行,container默认的内存是1G,ApplicationMaster分配的内存是driver- memory,executor分配的内存是executor-memory。同时,因为Driver在客户端,所以程序的运行结果可以在客户端显 示,Driver以进程名为SparkSubmit的形式存在。

yarn-cluster的工作流程步骤为

  • Driver运行位置在AM
  • Client提交上去了 它退出对整个作业没影响
  • AM(申请资源)+Driver(调度DAG,分发任务)
    在这里插入图片描述

在这里插入图片描述
执行过程:

  1. Spark Yarn Client向YARN中提交应用程序,包括ApplicationMaster程序、启动ApplicationMaster的命令、需要在Executor中运行的程序等
  2. ResourceManager收到请求后,在集群中选择一个NodeManager,为该应用程序分配第一个Container,要求它在这个Container中启动应用程序的ApplicationMaster,其中ApplicationMaster进行SparkContext等的初始化
  3. ApplicationMaster向ResourceManager注册,这样用户可以直接通过ResourceManage查看应用程序的运行状态,然后它将采用轮询的方式通过RPC协议为各个任务申请资源,并监控它们的运行状态直到运行结束
  4. 一旦ApplicationMaster申请到资源(也就是Container)后,便与对应的NodeManager通信,要求它在获得的Container中启动CoarseGrainedExecutorBackend,而Executor对象的创建及维护是由CoarseGrainedExecutorBackend负责的,CoarseGrainedExecutorBackend启动后会向ApplicationMaster中的SparkContext注册并申请Task。这一点和Standalone模式一样,只不过SparkContext在Spark
    Application中初始化时,使用CoarseGrainedSchedulerBackend配合YarnClusterScheduler进行任务的调度,其中YarnClusterScheduler只是对TaskSchedulerImpl的一个简单包装,增加了对Executor的等待逻辑等
  5. ApplicationMaster中的SparkContext分配Task给CoarseGrainedExecutorBackend执行,CoarseGrainedExecutorBackend运行Task并向ApplicationMaster汇报运行的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务
  6. 应用程序运行完成后,ApplicationMaster向ResourceManager申请注销并关闭自己

Yarn Client和Yarn cluster关于网卡流量激增以及无法看日志的问题,需要综合选择

具体参考:https://www.cnblogs.com/ITtangtang/p/7967386.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值