YARN基础教程

概述

YARN(Yet Another Resource Negotiator)
Yarn是一个分布式的资源管理系统,用于提高分布式的集群环境下的资源利用率,这些资源包括内存、IO、网络、磁盘等。其产生的原因是为了解决原MapReduce框架的不足。最初MapReduce的committer还可以周期性的在已有的代码上进行修改,可是随着代码的增加以及原MapReduce框架设计的不足,在原MapReduce框架上进行修改变得越来越困难,所以MapReduce的committer决定从架构上重新设计MapReduce,使下一代的MapReduce(MRv2/Yarn)框架具有更好的扩展性、可用性、可靠性、向后兼容性和更高的资源利用率,以及能支持除了MapReduce计算框架外的更多的计算框架

架构

在这里插入图片描述
ResourceManager:RM是一个全局的资源管理器,负责整个系统的资源管理和分配。它主要由两个组件构成:调度器(Scheduler)和应用程序管理器(Applications Manager,ASM)

NodeManager:NM是每个节点上的资源和任务管理器,一方面,它会定时地向RM汇报本节点上的资源使用情况和各个Container的运行状态;另一方面,它会接收并处理来自AM的Container启动/停止等各种请求

ApplicationMaster(AM)
用户提交的每个应用程序均包含一个AM,主要功能包括:

  • 与RM调度器协商以获取资源(用Container表示)
  • 将得到的资源进一步分配给内部任务
  • 与NM通信以启动/停止任务
  • 监控所有任务的运行状态,并在任务运行失败时重新为任务申请资源以重启任务

YARN Child:负责做实际计算任务

Container:Container是YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等,当AM向RM申请资源时,RM为AM返回的资源便是用Container表示的

YARN的Job提交流程

MR on yarn执行流程

在这里插入图片描述

  1. 运行MapReduce任务,启动JVM进程RunJar,实例化MapReduce Job任务实例
  2. Job任务实例,请求Yarn集群ResourceManger注册应用信息,并且返回一个应用标示JobId
  3. Job任务实例,将任务资源(jar包、配置文件、计算数据切片信息)等拷贝到共享的HDFS文件系统中【移步计算而不是数据】
  4. 提交Job,交给ResourceManger进行调度处理【之后,所有操作发生在Yarn集群中】
  5. Yarn集群的ResourceManager【负责统筹管理分布式集群资源和任务调度】会在一台空间的NodeManger启动一个容器MRAppMaster【负责当前Job监控管理、故障恢复】
  6. MRAppMaster 进一步初始化Job【计算ReduceTask任务数量 默认1 或者手动设定】
  7. MRAppMaster从共享的文件系统HDFS中获取数据切片的信息【计算MapTask任务数量】
  8. MRAppMaster请求Yarn集群的资源管理器分配相应单位(MapTask + ReduceTask = 申请的计算容器的数量)的计算资源
  9. MRAppMaster会在ResourceManager分配的NodeManager上启动对应数量计算容器JVM进程(YARNChild:Contaniner 运行MapTask或者ReduceTask)
  10. YarnChild会接收负责计算数据以及获取执行的jar包
  11. 在YarnChild JVM进程中运行在MapTask或者ReduceTask
  12. 将计算结果存放到存储系统,并且释放所占用的计算资源

Spark on yarn(cluster)

  1. client 向 yarn 提交一个job
  2. ResouceManager 为该job在某个 NodeManager 上分配一个 ApplicationMaster,NM启动ApplicationMaster,ApplicationMaster启动 driver(sparkContext)
  3. ApplicationMaster 启动后完成初始化作业,driver 生成DAG 图,DAG scheduler 将DAG 拆分成 stage (TaskSet)发送给 Task Scheduler
  4. AM 向 RM 申请资源,RM 返回 Executo r信息
  5. AM 通过 rpc 启动相应的 sparkExecutor
  6. Driver 向 Executor 分配 task
  7. Executor 执行结果写入文件或返回 driver 端
    在这里插入图片描述

Spark on yarn(client)

  1. 客户端启动后直接运行应用程序,直接启动 driver,并初始化
  2. 客户端将 job 发布到 yarn 上
  3. RM 为该job 在某个 NM 分配一个 AM
  4. AM 向 RM 申请资源,RM 返回Executor 信息
  5. AM 通过 RPC 启动相应的 Executor
  6. driver 生成DAG 图,DAG scheduler 将DAG 拆分成 stage (TaskSet)发送给 Task Scheduler
  7. Driver 向 Executor 分配 task
  8. Executor 执行task 并将结果写入第三方存储系统或者 Driver 端
    在这里插入图片描述
    yarn-cluster和yarn-client模式的区别:
  • yarn-cluster模式下,driver运行在AM中,它负责向YARN申请资源,并监督作业的运行状况。
    当用户提交了作业之后,就可以关掉Client,作业会继续在YARN上运行,显然yarn-cluster模式不适合运行交互类型的作业
  • yarn-client模式下,ApplicationMaster仅仅向YARN请求executor,client会和请求的container通信来调度他们工作,也就是说Client不能离开
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值