Apache Hadoop YARN
-
YARN架构结构
yarn是基于Master/Slave模式的分布式架构,yarn的架构结构如图:
【1】:client,可以理解为编写的大数据程序。
【2】:ResourceManager(RM),主要有两个组件,Scheduler和ApplicationManager(AM)。2.4.0版本后新增了RM HA特性。
Scheduler:调度器,负责将内存、cpu、磁盘、网络IO分配给各个NM。
ApplicationManager,负责client任务的提交,并把任务分发给各个NM。
【3】:NodeManager(NM),监控ApplicationMaster和Container的使用情况,并将节点状态发送给RM
【4】:ApplicationMaster(AM):应用集群中的master,HA机制,保证可用性。eg,spark cluster-yarn模式下的master集群。
【5】:Container:容器,程序运行的容器。
YARN运行过程
-
yarn cluster模式
【1】:客户端提交application到RM,RM判断资源(CPU、内存)需要使用状况,配置文件的读取,设置application名称。
【2】:RM选取某一个NodeManager启动AppMaster(AM),AppMaster 初始化SparkContext。该NodeManager为Driver。
【3】:AppMaster向RM申请资源(申请container的内存大小等),并在每个NodeManager上启动Container容器(执行分布式程序),如果是spark任务,则Container里面初始化Executer。yarn中的Container和spark中的executer可以理解为等同。
【4】:AppMaster里的sparkContext与Container通信可以采用akka
【5】:AppMaster所在的机器就是driver,application提交到RM上,client就可以关闭了。
yarn client模式
【1】:客户端初始化SparkContext,客户端就是driver。
【2】:客户端提交application到RM,RM判断资源(CPU、内存)需要使用状况,配置文件的读取,设置application名称。
【3】:RM选取某一个NodeManager启动AppMaster(AM)
【4】:AppMaster向RM申请资源,并在每个NodeManager上启动Container容器,开始默认容器数量为1个,任务执行过程中资源不足,会再次向RM申请资源,在NodeManager上启动新的Container容器。
【5】:客户端里的sparkContext与Container通信可以采用akka
-
yarn-site.xml
ResourceManager中的配置
yarn.scheduler.minimum-allocation-mb:(1G)单个容器可申请的最小内存
yarn.scheduler.maximum-allocation-mb:(8G)单个容器可申请的最大内存
NodeManager中的配置
yarn.nodemanager.resource.memory-mb:(80G)yarn节点可用的最大内存,则container最大数量=80G/1G
yarn.nodemanager.vmem-pmem-ratio:默认2.1,虚拟内存率,占task所用内存的百分比???。
yarn web UI中 总核数=yarn节点最大内存节点数 总内存数=yarn节点最大核数节点数
ApplicationMaster中的配置,此处以MapReduce为例进行说明(mapred-site.xml)
mapreduce.map.memory.mb:map任务内存大小
mapreduce.reduce.memory.mb:reduce任务内存大小,默认情况下,reduce是map内存大小的2倍
两个参数值,应该在container的内存最大、最小值之间
mapreduce.map.memory.mb:和JVM相关
mapreduce.reduce.memory.mb:和JVM相关
-
yarn Scheduler类
【1】:FairScheduler,公平调度
单个用户对应一个队列,各个队列或者用户之间平均分配资源
【2】:FifoScheduler,先进先出调度,
全局一个队列,任务都进入该队列,采用先进先出的方式执行任务。
【3】:CapacityScheduler,容量调度
单个组织对应一个队列,一个组织中可以有多个用户,队列内部采用先进先出方式。
各个队列设置最大、最小占用资源比例,避免各个队列彼此影响。 -
yarn 应用
- yarn 资源分配
CDH中yarn对node进行系统资源分配(大约65%):eg,每个节点内存128G,yarn可使用的内存大约在80G左右,yarn.nodemanager.resource.memory-mb=80参数可以配置。如果集群内存资源紧张,可以调整此参数,但需要考虑操作系统和其他应用需要的内存。
- yarn 资源分配