简岩 杨道平
摘 要:文章详细介绍了Hadoop Yarn框架及Hadoop调度,并分析了Yarn框架下的标签调度(Label based scheduling)策略,以实例方式详细介绍了标签调度的应用场合和使用方法。该文的方法对基于Hadoop Yarn框架下的大数据处理平台配置,特别是异构环境中的平台优化有一定的参考意义。
关键词:大数据;框架;标签调度
中图分类号:TP311.13 文献标识码:A 文章编号:1006-8937(2015)15-0072-01
1 概 述
在Hadoop0.20版本推出之后,Hadoop开源社区开始设计全新构架的新一代Hadoop系统,该版本后演化为Hadoop2.0版本,即新一代的Hadoop系统YARN。
YARN构架将主控节点的资源管理和作业管理功能分离设置,引入了全局资源管理器(Resource Manager)和针对每个作业的应用主控管理器(Application Master)。在最新的Hadoop 2.6.0版本中,YARN引入了一种新的调度策略:基于标签的调度机制。该机制的主要引入动机是更好地让YARN运行在异构集群中,进而更好地管理和调度混合类型的应用程序,本文即尝试如何使用标签调度展开讨论。
2 Hadoop Yarn框架介绍
新的Hadoop MapReduce框架命名为MapReduceV2或者叫 Yarn。重构根本的思想是将JobTracker两个主要的功能分离成单独的组件,这两个功能是资源管理和任务调度/监控。新的资源管理器全局管理所有应用程序计算资源的分配,每一个应用的ApplicationMaster负责相应的调度和协调。一个应用程序无非是一个单独的传统的MapReduce任务或者是一个DAG(有向无环图)任务。ResourceManager和每一台机器的节点管理服务器能够管理用户在那台机器上的进程并能对计算进行组织。每一个应用的ApplicationMaster的职责有:向调度器索要适当的资源容器运行任务,跟踪应用程序的状态和监控它们的进程,处理任务的失败原因。
3 Hadoop常用调度器
为了更好地理解标签调度技术,有必要回顾一下Hadoop常用的调度器。
3.1 默认的调度器FIFO
最早的Hadoop Map/Reduce 计算架构中,JobTracker 在进行作业调度时使用的FIFO(First In First Out)算法,其优点是调度算法简单明了,JobTracker工作负担轻。
3.2 公平份额调度算法(Fair Scheduler)
Fair Scheduler是由Facebook公司提出的,设计思想是,尽可能保证所有的作业都能够获得等量的资源份额,Fair Scheduler考虑了作业用户的“公平性”。
3.3 计算能力调度器(Capacity Scheduler)
Capacity Scheduler能有效的对hadoop集群的内存资源进行管理,以支持内存密集型应用。作业对内存资源需求高时,调度算法将把该作业的相关任务分配到内存资源充足的节点上。在hadoop自带的调度器中,Capacity Scheduler支持标签调度,FIFO Scheduler和Fair Scheduler尚不支持。
4 Label based scheduling应用
Label based scheduling是一种调度策略,就像priority-based scheduling一样,是调度器调度众多调度策略中的一种,可以跟其他调度策略混合使用,下面以实例说明。
不失一般性,假设有30个以上的节点,各节点硬件配置和网络部署如表一所示,其中:HighCPU组10个节点,各节点CPU运算能力较强,适合计算密集型任务;HighMEM组10个节点,计算能力普通,但各节点内存较高,适合内存密集型任务;HighIO组10个节点,计算能力和内存配置普通,但使用了IB高性能网络,网络交换能力较强,适合IO密集型任务。
假设公司运行的任务类型有三类,一类是普通的Hadoop应用,一类是运行高内存需求应用,一类是高IO的应用。
首先,用Normal、HighgCPU、Highmem、HighIO表示分配标签名,需要为三类节点创建相应的标签,方法如下:
修改capacity scheduler相关配置,设置每个队列对应的label,以及每中label的资源上下限。根据规划,应创建四个队列,假设为queue1、queue2、queue3、queue4,其中queue1队列可使用的标签是Normal和HighgCPU、Highmem、HighIO,queue2队列可使用的标签是HighCPU,queue3队列可使用的标签是HighMEM,queue4队列可使用的标签是HighIO,并配置四个队列的capacity和maxcapacity。
之后按照以下步骤操作:
步骤1:添加系统级别的label(相当于所有label的全集),注意各个节点上的label必须都在系统级别的label中。
yarn rmadmin-addToClusterNodeLabels Normal,HighCPU,HighMeM,HighIO
步骤2:为各个节点分别添加label(可动态修改)。
yarn rmadmin -replaceLabelsOnNode“nodeId,Normal,High-
CPU,HighMeM,HighIO”
注意,nodeId是nodemanager的唯一标示,注意一个节点上可以有多个nodemanager,每个nodemanager的nodeid可以在ResourceManager界面上看到,通常有host和PRC port拼接而成,默认情况下,各个nodemanager的RPC port是随机选取的,你可以将所有的nodemanager配置成一样的,便于管理:
步骤3:配置label重启恢复功能。这样,label信息会保存到hdfs上(默认是保存在内存中的),之后Yarn重新启动,可以自动恢复所有label信息:
nodelabels.RMNodeLabelsManager
5 结 语
本文详细介绍本文详细介绍了Hadoop Yarn框架下的标签调度(Label based scheduling)策略,并介绍了使用方法,但对异构环境中的资源类别划分、任务类别划分等没有作深入的讨论,用户在使用标签调度时,应根据平台的实际资源状况作出比较详细的分类,然后根据各任务的资源需求建立相对合理的配置规划,只有这样,才能充分发挥标签调度的作用。
参考文献:
[1] 邓传华,范通让,高峰.Hadoop下基于统计最优的资源调度算法[J].计算机应用研究,2013,(2).
[2] 土峰.Hadoop集群作业的调度算法[J].程序员,2009,(12).
[3] 高源.云计算Hadoop平台调度策略研究[J].科海故事博览,2011,(2).