@zhangyy
2020-10-01T14:56:45.000000Z
字数 2806
阅读 176
大数据运维系列
1.高可靠
当应用基于YARN运行的应用程序失败时可以自动拉起
2.可扩展性
可以通过简单的增加服务器数达到增加资源的目的
3.并行性
可以同时运行大量任务
4. 平台型
可以同时支撑多种类型的应用程序运行
5.大规模
可以支持成千上万节点协同计算
ResourceManager(RM)
全局的资源管理器,负责整个系统的资源管理和分配,它带了FIFO、Capacity Schedule、Fair Schedule三种常用调度器
NodeManager(NM)
每个节点上的资源和任务管理器,定时地向RM汇报本节点上
的资源以及使用情况和各个Container的运行状态,接收并处理来自AM的
Container启动/停止等各种请求。
ApplicationMaster(AM)
用户提交的每个应用程序均包含一个AM,它与RM调度器协商以获取
资源分配给内部的任务;与NM通信以启动/停止任务;监控所有任务运行
状态,并在任务运行失败时重新为任务申请资源以重启任务。
Container
YARN中的资源抽象,它封装了某个节点上的多维度资源,如内存、
CPU等,当AM向RM申请资源时,RM为AM返回的资源便是用Container
表示的。YARN会为每个任务分配一个Container,且该任务只能使用该
Container中描述的资源
1)作业提交
client调用job.waitForCompletion方法,向整个集群提交MapReduce作业 (第1步) 。 新的作业ID(应用ID)由资源管理器分配(第2步). 作业的client核实作业的输出, 计算输入的split,将作业的资源(包括Jar包, 配置文件, split信息)拷贝给HDFS(第3步). 最后, 通过调用资源管理器的submitApplication()来提交作业(第4步).
2)作业初始化
当资源管理器收到submitApplication()的请求时, 就将该请求发给调度器(scheduler), 调度器分配container, 然后资源管理器在该container内启动应用管理器进程, 由节点管理器监控(第5a和5b步)。
MapReduce作业的应用管理器是一个主类为MRAppMaster的Java应用。其通过创造一些bookkeeping对象来监控作业的进度, 得到任务的进度和完成报告(第6步)。然后其通过分布式文件系统得到由客户端计算好的输入split(第7步)。然后为每个输入split创建一个map任务, 根据mapreduce.job.reduces创建reduce任务对象。
3)任务分配
如果作业很小,应用管理器会选择在其自己的JVM中运行任务。如果不是小作业, 那么应用管理器向资源管理器请求container来运行所有的map和reduce任务(第8步). 这些请求是通过心跳来传输的, 包括每个map任务的数据位置, 比如存放输入split的主机名和机架(rack). 调度器利用这些信息来调度任务, 尽量将任务分配给存储数据的节点, 或者退而分配给和存放输入split的节点相同机架的节点.
4)任务运行
当一个任务由资源管理器的调度分配给一个container后, 应用管理器通过联系节点管理器来启动container(第9a步和9b步). 任务由一个主类为YarnChild的Java应用执行. 在运行任务之前首先本地化任务需要的资源, 比如作业配置, JAR文件, 以及分布式缓存的所有文件(第10步). 最后, 运行map或reduce任务(第11步).
YarnChild运行在一个专用的JVM中, 但是YARN不支持JVM重用.
5)进度和状态更新
YARN中的任务将其进度和状态(包括counter)返回给应用管理器,客户端每秒(通过mapreduce.client.progressmonitor.pollinterval设置)向应用管理器请求进度更新,展示给用户。
6)作业完成
除了向应用管理器请求作业进度外,客户端每5分钟都会通过调用waitForCompletion()来检查作业是否完成。时间间隔可以通过mapreduce.client.completion. pollinterval来设置。作业完成之后, 应用管理器和container会清理工作状态, OutputCommiter的作业清理方法也会被调用。作业的信息会被作业历史服务器存储以备之后用户核查。
步骤1客户端将应用程序所需的文件资源(外部字典、JAR包、二进制文件等)提交到HDFS上。
步骤2客户端将应用程序提交到ResourceManager上。
步骤3 ResourceManager与某个NodeManager通信,启动应用程序ApplicationMaster,NodeManager收到命令后,首先从HDFS下载文件
(缓存),然后启动ApplicationMastero
步骤4 ApplicationMaster与ResourceManage:通信,以请求和获取计算资源。
步骤5 ApplicationMaster收到新分配的计算资源后,与对应的NodeManager通信,以启动任务。
步骤6如果该应用程序第一次在该节点上启动任务,则NodeManager首先从HDFS上下载文件缓存到本地,然后启动任务。
步骤7 NodeManager后续收到启动任务请求后,如果文件以在本地缓存,则直接运行任务,否则等待文件缓存完成后再启动。
各节点上的缓存文件由对应的NodeManager管理和维护。考虑到磁盘空间的有限性,NodeManager采用了一定的缓存置换算法定期清理
失效文件。
组件安装规划、CPU、内存规划
产线环境高可用配置、集群部署、resourcemanager/nodemanager集群服务启动、服务验证、日志跟踪
resourcemanager主备切换、nodemanager上线服役、nodemanager下线退役
调度器设置、资源队列配置
核心指标监控