YARN基础
Posted 杀智勇双全杀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了YARN基础相关的知识,希望对你有一定的参考价值。
YARN基础
YARN概述
YARN定义
YARN是一个分布式的资源管理和任务调度的框架。
YARN本质
将多台的机器CPU和内存从逻辑上合并为一个整体,对外提供统一的计算服务。
分布式计算 = 分布式程序 + 分布式运行环境。
分布式程序:MapReduce。
分布式运行环境:YARN。
YARN功能
提供分布式运行资源环境。
YARN应用场景
实现分布式计算,将分布式程序提交到分布式资源容器中运行:
MapReduce
Tez
Spark
……
YARN集群架构
分布式主从架构。
ResourceManager
主:管理节点。
管理从节点的状态:心跳机制。
管理资源管理和任务调度
资源管理:每个Task能用多少资源
任务调度:多个程序谁先运行谁后运行
接受客户端的请求。
NodeManager
从:计算节点。
接受主节点的任务分配。
使用自己所在节点的CPU和内存实现Task的运行。
YARN运行MapReduce流程
客户端提交运行一个MapReduce的程序给YARN,YARN会检查请求是否合法。
如果合法,RM会随机选择一台NodeManager启动这个程序的管理者:AppMaster(AppMaster每一个程序都有一个,负责这个程序的资源申请、Task的运行、Task的监控,运行的汇报)。
APPMaster会向ResourceManager申请指令和资源信息,获取如何运行这个程序的信息
ResourceManager根据Task的情况分配运行的节点以及资源的信息,以Container的形式返回(Contiainer:信息包,记录每个Task运行的节点、处理的数据、运行的逻辑、资源,也是MapTask和ReduceTask的父进程)
APPMaster将指令和container信息分发给对应的NodeManager,每个NodeManger根据指令和资源来启动对应的Task进程。
MapTask运行结束后,会通知AppMaster,APPMaster会通知ReduceTask到MapTask中拉取数据。
ReduceTask到每个MapTask中拉取数据,并执行处理,最后运行结束,将结果返回给APPMaster。
最终结果返回给客户端。
YARN的资源管理配置
配置属性 | 值 | 含义 |
---|---|---|
yarn.nodemanager.resource.memory-mb | 8192 | 每台NodeManger能够使用的最大物理内存数 |
yarn.nodemanager.resource.cpu-vcores | 8 | 每台NodeManger能够使用的最大物理CPU核数 |
yarn.scheduler.minimum-allocation-mb | 1024 | 每个Task容器最少申请的内存 |
yarn.scheduler.maximum-allocation-mb | 8192 | 每个Task容器最多申请的内存 |
yarn.scheduler.minimum-allocation-vcores | 1 | 每个Task容器最少申请的CPU核数 |
yarn.scheduler.maximum-allocation-vcores | 8 | 每个Task容器最多申请的CPU核数 |
yarn.nodemanager.vmem-pmem-ratio | 2.1 | 虚拟内存率【磁盘空间】 |
常见问题
OOM:out of memory。
物理内存溢出:增加物理内存配置。
报错:physic memory 6GB of 5GB。
虚拟内存溢出:增加虚拟内存倍数。
报错:vistual memory 17 of 16.8。
堆内存溢出:配置允许每个Task使用的内存不足。
需要修改MapReduce配置。
YARN的任务调度机制
FIFO先进先出调度
Hadoop1.x版本使用。
单队列的,单个队列享有整个YARN的所有资源。队列内部是先进先出的,每个程序按照提交的顺序挨个执行。资源浪费,无法实现并发和并行。
Capacity容量调度
Apache版本的Hadoop默认的调度器。
多队列的,多个队列自定义分配所有资源。队列内部是先进先出的,每个程序按照提交的顺序挨个执行。能实现多队列的并行执行、用户使用队列机制的隔离,互不干扰,允许资源动态抢占。队列内部只能运行一个程序,不能实现并发
Fair公平调度
CDH版本的Hadoop默认的调度器。
多队列的,队列内部公平的分配资源,允许指定权重和优先级来指定资源的优先分配,动态资源抢占、权重分配。
调度配置
属性 | 值 | 含义 |
---|---|---|
yarn.resourcemanager.scheduler.class | org.apache.hadoop. yarn.server.resourcemanager .scheduler.fair.FairScheduler | 指定调度器类型 |
yarn.scheduler.fair.allocation.file | etc/hadoop/fair-scheduler.xml | 指定公平调度的配置文件,配置文件中定义每个队列以及每个队列的资源 |
yarn.scheduler.fair.user-as-default-queue | false | 没有指定队列名时,是否使用用户名作为队列名称 |
yarn.scheduler.fair.preemption | false | 是否允许资源抢占 |
yarn.scheduler.fair.preemption.cluster-utilization-threshold | 0.8 | 最大抢占比例 |
yarn.scheduler.fair.sizebasedweight | true | 是否启用权重 |
yarn.scheduler.fair.assignmultiple | true | 是否允许分配多个container |
yarn.scheduler.fair.max.assign | 20 | 如果允许,最多分配多少个 |
yarn.scheduler.fair.locality.threshold.node | -1 | 放弃等待优先本地计算的节点比例,-1表示都不放弃 |
yarn.scheduler.fair.locality.threshold.rack | -1 | 放弃等待优先机架计算的节点比例,-1表示都不放弃 |
yarn.scheduler.fair.allow-undeclared-pools | true | 是否允许创建未定义的队列 |
yarn.scheduler.fair.update-interval-ms | 500 | 表示重新计算公平调度的间隔,单位毫秒 |
<?xml version="1.0"?>
<allocations>
<queue name="sample_queue">
<minResources>10000 mb,0vcores</minResources>
<maxResources>90000 mb,0vcores</maxResources>
<maxRunningApps>50</maxRunningApps>
<maxAMShare>0.1</maxAMShare>
<weight>2.0</weight>
<schedulingPolicy>fair</schedulingPolicy>
<queue name="sample_sub_queue">
<aclSubmitApps>charlie</aclSubmitApps>
<minResources>5000 mb,0vcores</minResources>
</queue>
</queue>
<queueMaxAMShareDefault>0.5</queueMaxAMShareDefault>
<!-- Queue 'secondary_group_queue' is a parent queue and may have
user queues under it -->
<queue name="secondary_group_queue" type="parent">
<weight>3.0</weight>
</queue>
<user name="sample_user">
<maxRunningApps>30</maxRunningApps>
</user>
<userMaxAppsDefault>5</userMaxAppsDefault>
<queuePlacementPolicy>
<rule name="specified" />
<rule name="primaryGroup" create="false" />
<rule name="nestedUserQueue">
<rule name="secondaryGroupExistingQueue" create="false" />
</rule>
<rule name="default" queue="sample_queue"/>
</queuePlacementPolicy>
</allocations>
JobHistoryServer与日志聚集
JobHistoryServer
功能
这货是MapReduce的一个历史服务监控进程,记录在YARN中运行过的所有MapReduce的程序的信息。必须搭配日志聚集来使用。
配置
<property>
<name>mapreduce.jobhistory.address</name>
<value>node2:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>node2:19888</value>
</property>
启动及管理
在node2:
mr-jobhistory-daemon.sh start historyserver
使用jps
即可看到进程。或者浏览器访问node2:19888
也可以看到。
日志聚集
功能
这货是YARN的一个功能,用于记录所有程序运行的信息,将所有的信息记录在HDFS中。
配置
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
以上是关于YARN基础的主要内容,如果未能解决你的问题,请参考以下文章
[vscode]--HTML代码片段(基础版,reactvuejquery)