Yarn
yarn:是一个通用的资源管理和任务调度系统
角色:
ResourceManager(RM):主角色 统一入口 调度资源
NodeManager(NM):负责每台机器具体的资源管理
ApplicationMaster(AM):程序内部的老大 负责程序执行的监督管理 资源申请
ApplicationMaster
用户提交的每个应用程序均包含一个ApplicationMaster,它可以运行在ResourceManager以外的机器上。
负责与RM调度器协商以获取资源(用Container表示)。
将得到的任务进一步分配给内部的任务(资源的二次分配)。
与NM通信以启动/停止任务。
监控所有任务运行状态,并在任务运行失败时重新为任务申请资源以重启任务。
当前YARN自带了两个ApplicationMaster实现,一个是用于演示AM编写方法的实例程序DistributedShell,它可以申请一定数目的Container以并行运行一个Shell命令或者Shell脚本;另一个是运行MapReduce应用程序的AM—MRAppMaster。
注:RM只负责监控AM,并在AM运行失败时候启动它。RM不负责AM内部任务的容错,任务的容错由AM完成。
什么是调度?
当集群繁忙的时候,各种程序都来申请资源,yarn如何分配资源的问题
调度策略?
FIFO Scheduler 先进先出 所有的程序按照提交的时间排队
缺点:大job阻塞小job
Capacity Scheduler 容量调度 把集群资源划分不同队列 大job提交大job队 小job提交到小job队
缺点:每个队列内部还是FIFO 某个时期 某种任务很多 其他任务很少 导致资源浪费
Fair Scheduler 公平调度 队列内部动态的调整资源的使用 尽量满足当下运行的所有程序
缺点:释放资源的过程需要等待
默认调度策略:
Apache官方版本: Capacity Scheduler
CDH商业版: Fair Scheduler
配置参数:yarn.resourcemanager.scheduler.dass yarn-site.xml
yarn在2.9之后有一个新的调度 叫标签调度 新老服务器一起用 但是是一个集群 打标签指定让谁跑
动态平衡点 需要通过最大上限限制不断蚕食的现象
如果分配调度队列的层次 在提交程序的时候 必须指定清队列名称 否则就失败
mapreduce.job.queuename=/root/dev/mapreduce 错误
mapreduce.job.queuename=root.dev.mapreduce 错误
mapreduce.job.queuename=mapreduce 正确 队列名必须是队列树中的最后那部分
如果用户不配置 默认全局只有一个队列 队列名 /default