Apache Yarn(Yet Another Resource Negotiator的缩写)是hadoop集群资源管理器系统,Yarn从hadoop 2引入,最初是为了改善MapReduce的实现,但是它具有通用性,同样执行其他分布式计算模式。
Yarn从整体上还是属于master/slave模型,主要依赖于三个组件来实现功能。
ResourceManager
,是集群资源的仲裁者,它包括两部分:一个是可插拔式的调度Scheduler,一个是ApplicationManager,用于管理集群中的用户作业。NodeManager
,管理该节点上的用户作业和工作流,也会不断发送自己Container使用情况给ResourceManager。ApplicationMaster
,用户作业生命周期的管理者它的主要功能就是向ResourceManager(全局的)申请计算资源(Containers)并且和NodeManager交互来执行和监控具体的task。RM是一个全局的资源管理器,管理整个集群的计算资源,并将这些资源分配给应用程序。包括:
最小容器内存:
yarn.scheduler.minimum-allocation-mb
容器内存增量:
yarn.scheduler.increment-allocation-mb
最大容器内存:
yarn.scheduler.maximum-allocation-mb
最小容器虚拟 CPU 内核数量:
yarn.scheduler.minimum-allocation-mb
容器虚拟 CPU 内核增量:
yarn.scheduler.increment-allocation-vcores
最大容器虚拟 CPU 内核数量:
yarn.scheduler.maximum-allocation-mb
ResourceManager Web 应用程序 HTTP 端口:
yarn.resourcemanager.webapp.address
应用程序级别的,管理运行在YARN上的应用程序。包括:
ApplicationMaster 最大尝试次数:
yarn.resourcemanager.am.max-attempts
ApplicationMaster 监控过期:
yarn.am.liveness-monitor.expiry-interval-ms
YARN中每个节点上的代理,它管理Hadoop集群中单个计算节点。包括:
节点内存:
yarn.nodemanager.resource.memory-mb
节点虚拟 CPU 内核:
yarn.nodemanager.resource.cpu-vcores
NodeManager Web 应用程序 HTTP 端口:
yarn.nodemanager.webapp.address
Container是YARN中资源的抽象,它封装了某个节点上的多维度资源,如内存、CPU、磁盘、网络等。Container由AM向RM申请的,由RM中的资源调度器异步分配给AM。Container的运行是由AM向资源所在的NM发起。
一个应用程序所需的Container分为两大类:
以上两类Container可能在任意节点上,它们的位置通常而言是随机的,即AM可能与它管理的任务运行在一个节点上。更多关于大数据 Hadoop系列的学习文章,请参阅:进击大数据系列,本系列持续更新中。
Application在Yarn中的执行过程如下图所示:
1.客户端程序向ResourceManager提交应用并请求一个ApplicationMaster实例,ResourceManager在应答中给出一个applicationID以及有助于客户端请求资源的资源容量信息。
2.ResourceManager找到可以运行一个Container的NodeManager,并在这个Container中启动ApplicationMaster实例
3.ApplicationMaster向ResourceManager进行注册,注册之后客户端就可以查询ResourceManager获得自己ApplicationMaster的详细信息,以后就可以和自己的ApplicationMaster直接交互了。在注册响应中,ResourceManager会发送关于集群最大和最小容量信息,
4.在平常的操作过程中,ApplicationMaster根据resource-request协议向ResourceManager发送resource-request请求,ResourceManager会根据调度策略尽可能最优的为ApplicationMaster分配container资源,作为资源请求的应答发个ApplicationMaster
5.当Container被成功分配之后,ApplicationMaster通过向NodeManager发送container-launch-specification信息来启动Container, container-launch-specification信息包含了能够让Container和ApplicationMaster交流所需要的资料,一旦container启动成功之后,ApplicationMaster就可以检查他们的状态,Resourcemanager不在参与程序的执行,只处理调度和监控其他资源,Resourcemanager可以命令NodeManager杀死container,
6.应用程序的代码在启动的Container中运行,并把运行的进度、状态等信息通过application-specific协议发送给ApplicationMaster,随着作业的执行,ApplicationMaster将心跳和进度信息发给ResourceManager,在这些心跳信息中,ApplicationMaster还可以请求和释放一些container。
7.在应用程序运行期间,提交应用的客户端主动和ApplicationMaster交流获得应用的运行状态、进度更新等信息,交流的协议也是application-specific协议
8.一但应用程序执行完成并且所有相关工作也已经完成,ApplicationMaster向ResourceManager取消注册然后关闭,用到所有的Container也归还给系统,当container被杀死或者回收,Resourcemanager都会通知NodeManager聚合日志并清理container专用的文件。
更多关于大数据 Hadoop系列的学习文章,请参阅:进击大数据系列,本系列持续更新中。
FIFO调度器的优点是简单易懂不需要任何配置,但是不适合共享集群。大型应用会占用集群中的所有资源,所以每个应用必须等待直到轮到自己运行。在一个共享集群中,更适合使用容量调度器或公平调度器。这两种调度器都允许长时间运行的作业能及时完成,同时也允许正在进行较小临时查询的用户能够在合理时间内得到返回结果。
容量调度器允许多个组织共享一个Hadoop集群,每个组织可以分配到全部集群资源的一部分。每个组织被配置一个专门的队列,每个队列被配置为可以使用一定的集群资源。队列可以进一步按层次划分,这样每个组织内的不同用户能够共享该组织队列所分配的资源。在一个队列内,使用FIFO调度策略对应用进行调度。
公平调度是一种对于全局资源,对于所有应用作业来说,都均匀分配的资源分配方法。默认情况,公平调度器FairScheduler基于内存来安排公平调度策略。也可以配置为同时基于内存和CPU来进行调度(Dominant Resource Fairness)。在一个队列内,可以使用FIFO、FAIR、DRF调度策略对应用进行调度。FairScheduler允许保障性的分配最小资源到队列。
更多关于大数据 Hadoop系列的学习文章,请参阅:进击大数据系列,本系列持续更新中。
首先配置 master,slave1和slave2之间的免密登录和各虚拟机的/etc/hosts文件,参考前面的配置过程,这里不做赘述。
启动 HDFS ,配置过程参考:
首先指定YARN主节点,输入如下命令编辑文件/usr/cstor/hadoop/etc/hadoop/yarn-site.xml
:
vim /usr/cstor/hadoop/etc/hadoop/yarn-site.xml
将如下内容嵌入此文件里configuration标签间:
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
yarn-site.xml
是YARN守护进程的配置文件。第一句配置了ResourceManager的主机名,第二句配置了节点管理器运行的附加服务为mapreduce_shuffle
,只有这样才可以运行MapReduce程序。
紧接着在master机上操作,将配置好的YARN配置文件拷贝至slaveX,也就是拷贝到其他服务器上:
for x in `cat ~/data/4/machines`;
do
echo $x;
scp /usr/cstor/hadoop/etc/hadoop/yarn-site.xml $x:/usr/cstor/hadoop/etc/hadoop/;
done;
确认已配置slaves文件,在master机器上查看:
cat /usr/cstor/hadoop/etc/hadoop/slaves
YARN配置无误,统一启动YARN:
/usr/cstor/hadoop/sbin/start-yarn.sh
分别在三台虚拟机上输入jps查看YARN服务是否已启动:
可以看出我们成功启动了。
在 master 节点成功启动 ResourceManager,它负责整个集群的资源管理分配,是一个全局的资源管理系统。
NodeManager 是每个节点上的资源和任务管理器,它是管理这台机器的代理,负责该节点程序的运行,以及该节点资源的管理和监控。YARN 集群每个节点都运行一个 NodeManager。
在当前的Windows机器上打开浏览器,地址栏输入master的IP和端口号8088(例:10.1.1.7:8088),即可在Web界面看到YARN相关信息。
列出所有的 Application:
yarn application -list
根据Application状态过滤:
yarn application -list -appStates ACCEPTED
Kill掉Application:
yarn application -kill [ApplicationId]
查看Application日志:
yarn logs -applicationId [ApplicationId]
查询Container日志:
yarn logs -applicationId [ApplicationId] -containerId [containerId] -nodeAddress [nodeAddress]
配置是配置文件中:
yarn.nodemanager.webapp.address 参数指定
链接:blog.csdn.net/qq_52417436/article/details/ 127766099 cnblogs.com/liugp/p/16101242.html