Skip to content

Concept

Parker Zhou edited this page Sep 12, 2020 · 1 revision

概念

Resource Manager/Node Manager

Resource Manager简称RM,Node Manager简称NN。RM负责接收Client的申请,分配资源和通知NN创建Container,并启动用户的进程。NN负责启动和监视Container。

Client/ApplicationMaster

应用想要在yarn上运行,除了开发应用本身的代码(包括跟分布式计算有关的代码),也需要开发与yarn框架适配的Client代码和ApplicationMaster代码。

Client一般需要完成如下动作:

  • 初始化配置,执行必要的登录或用户切换。
  • 通过yarnClient提交一个应用请求,获得应用的ApplicationId等信息。
  • 为ApplicationMaster(简称AM)的运行申请Container。
  • Container的申请信息中包含:
  • 希望传递给AM的环境变量,一般会包含一些固定的与hadoop有关的环境变量。
  • 上传jar包和其他必要的文件(如配置文件)到HDFS,也可以上传zip或tar.gz的压缩包。一般上传到当前用户的HOME目录下对应ApplicationId的子目录中方便维护。
  • 指定启动AM的命令行,这一步可以使用一些预定义的常量来确定一些路径信息,另外习惯上还需要将stdout和stderr定向到目录中,方便将来查看日志。
  • 设置AM执行需要的CPU/Memeory等资源需求,还可以包括运行应用的队列名。
  • 正式提交AM的Request。

如果yarn能够正常启动AM,Client可以选择退出,或者启动一个循环周期性获得ApplicationReport从而在Client端报告状态。

AM启动后,真正的工作其实是AM来完成的。但在此之前yarn会保证:

  • 为AM创建Container以及其运行目录。
  • 将上传到HDFS的文件(jar包,zip包,文件等)拉到运行AM的节点上,这一步叫Localize resources
  • Container执行Client指定的命令,启动AM。

AM一般需要完成如下动作:

  • 向RM注册,注册的时候需要提供tracking url,tracking url是提供web访问的功能。例如flink任务在yarn上执行的时候,AM其实就是JobManager,JobManager上显示的flink任务界面其实就是通过tracking url暴露的。RM会提供一个代理地址用于对app的tracking url的反向代理访问,客户端拿到的tracking url其实是代理地址。所以AM在监听端口的时候可以采用随机端口,不用担心端口不固定带来的麻烦。
  • 创建和启动AMRMClient。AMRMClient用于向RM申请Container用于执行进程实例。例如对于flink来说,AM会申请一定数量的Container用于执行TaskManager。申请Container需要告诉RM如下信息:
  • CPU/Memeory需求是什么。
  • (可选)Container需要在哪些节点或机架上运行(本地化策略),是否需要严格的本地化策略。
  • 创建和启动NMClient。NMClient通过startContainer用于真正向NN提交执行任务。类似Client提交AM执行一样,NMClient提交的描述信息也包含诸如环境变量,资源文件命令行等信息
  • 开始一个定时主循环,并在循环中通过AMRMClient得到Container的分配、执行情况,从而决策是否创建新的Container、是否启动Container等。

NN在执行任务前,也会自动Localize resources

上面大体解释了一个分布式应用如何与yarn配置,利用yarn框架将应用分布式运行。

Clone this wiki locally