文章目录
1. yarn的组成部分及其作用
- ResourceManager(RM):
1)处理客户端的请求
2)监控NodeManager
3)启动或监控ApplicationMaster
4)资源的分配和调度 - NodeManager(NM):
1)管理单个节点(服务器)上的资源
2)处理RM的命令
3)处理AM的命令 - ApplicationMaster(AM):
1)为应用程序申请资源并给内部分配任务
2)任务的监控与容错 - Container:
yarn中的资源抽象,封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等。
2. YARN的工作机制
1)运行jar包后会调用YarnRunner,YarnRunner会向RM申请一个ApplicationID;
2)RM向客户端返回Application资源提交路径(就是把Client想要干啥放这里);
3)Client会把job运行所需要的资源(split控制需要开启的mapTask的数量,xml资源配置,jar)提交;
4)提交完后,需要向RM申请运行的AM;
5)RM将用户请求初始化为一个Task,放在调度队列中,等待空闲的NM领取;
6)NM领取到Task后会创建一个Container,Container会启动一个AM,AM根据Client提交的split向RM申请运行MapTask的Container;
10)Container被创建后(一个NM可以创建多个Container,同一个Application的Container可以放在同一个NM中),AM会开启MapTask,MapTask开启YarnChild进程,运行结束后,MapTask按分区将运行结果持久化到磁盘;
12)AM向RM申请ReduceTask的Container,和上一步一样执行,执行结束后,AM向RM申请资源回收
3. 作业提交的全过程(HDFS、MR、Yarn的关系)
客户端Client提交任务到RM,RM接收到任务之后去NM节点开启AM, AM向RM申请资源后开启MapTask。每个mapTask独立工作,各自负责检索各自对应的DataNode,AM向RM申请资源后开启ReduceTask,将Map的结果进行reduce,记录到HDFS, DataNode负责存储,NameNode负责记录,2nn负责备份部分数据。
4. Yarn调度器有哪几种,并介绍一下其中一种
目前,Hadoop 作业调度器主要有三种:FIFO、容量(Capacity Scheduler)和公平(Fair Scheduler)。Apache Hadoop默认的资源调度器是 Capacity Scheduler。
容量调度器是yahoo开发的多用户调度器(多用户是指一个队列中既可以有root用户提交的job,也可以有user用户提交的job)。
- 特点:
1)多队列:每个队列可配置一定的资源量,每个队列采用FIFO调度策略。
2)容量保证:管理员可为每个队列设置资源最低保证和资源使用上限。
3)灵活性:如果一个队列中的资源有剩余,可以暂时共享给那些需要资源的队列,而一旦该队列有新的应用程序提交,则其他队列借调的资源会归还给改队列。
4)多租户:支持多用户共享集群和多应用程序同时运行,为了防止同一个用户的作业独占队列中的资源,该调度器会对同一个用户提交的作业所占资源量进行限定。 - 算法:
1)队列资源分配
优先选择资源占用率最低的队列分配资源(选择queueA,占用20%)。
2)作业资源分配
按优先级和提交时间顺序分配资源。
3)容器资源分配
先按照优先级分配,再通过机架感知分配
5.Yarn常用命令
1)查看所有Application:yarn application -list
2)根据 Application 状态过滤:yarn application -list -appStates (所有状态:ALL、NEW、NEW_SAVING、SUBMITTED、ACCEPTED、RUNNING、FINISHED、FAILED、KILLED)
3)Kill 掉 Application:yarn application -kill ApplicationId
4)查询 Application 日志:yarn logs -applicationId ApplicationId
5)查询 Container 日志:yarn logs -applicationId ApplicationId -containerId ContainerId
6)列出所有 Application 尝试的列表:yarn applicationattempt -list ApplicationId
7)打印 ApplicationAttemp 状态:yarn applicationattempt -status ApplicationAttemptId
8)列出所有 Container:yarn container -list ApplicationAttemptId
9)打印 Container 状态:yarn container -status ContainerId
10)列出所有节点:yarn node -list -all
11)加载队列配置:yarn rmadmin -refreshQueues
12)打印队列信息:yarn queue -status QueueName