分享

Hadoop(2.2和2.6) YARN新特性—指定运行节点且能同时运行spark及mapreduce

desehawk 2015-3-23 14:28:17 发表于 连载型 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 13 71288

问题导读


1.什么是Label based scheduling?
2.如何配置使用Label based scheduling?
3.如何让spark程序及mapreduce程序运行在一个集群中?
4.在spark及mapreduce集群中,如何指定spark运行机器及机器个数?






在最新的hadoop 2.6.0版本中,YARN引入了一种新的调度策略:基于标签的调度机制。该机制的主要引入动机是更好地让YARN运行在异构集群中,进而更好地管理和调度混合类型的应用程序。


注意,截止这篇文章发布时,只有apache hadoop 2.6.0和hdp 2.2两个发行版具有该特性(CDH5.3尚不支持,CDH5.4会支持),在hadoop自带的调度器重,只有 Capacity Scheduler支持该特性,FIFO Scheduler和Fair Scheduler尚不支持。、

什么是Label based scheduling?
故名思议,Label based scheduling是一种调度策略,就像priority-based scheduling一样,是调度器调度众多调度策略中的一种,可以跟其他调度策略混合使用,实际上,hadoop也是这样做的。但是,相比于其他调度策略,基于标签的调度策略则复杂的多,这个feature的代码量非常大,基本上需要修改YARN的各个模块,包括API, ResourceManager,Scheduler等。该策略的基本思想是:用户可以为每个nodemanager标注几个标签,比如highmem,highdisk等,以表明该nodemanager的特性;同时,用户可以为调度器中每个队列标注几个标签,这样,提交到某个队列中的作业,只会使用标注有对应标签的节点上的资源。举个例子:

比如最初你们的hadoop集群共有20个节点,硬件资源是32GB内存,4TB磁盘;后来,随着spark地流行,公司希望引入spark计算框架,而为了更好地运行spark程序,公司特地买了10个大内存节点,比如内存是64GB,为了让spark程序与mapreduce等其他程序更加和谐地运行在一个集群中,你们希望spark程序只运行在后来的10个大内存节点上,而之前的mapreduce程序既可以运行在之前的20个节点上,也可以运行在后来的10个大内存节点上,怎么办?有了label-based scheduling后,这是一件非常easy的事情,你需要按一以下步骤操作:

步骤1:为旧的20个节点打上normal标签,为新的10个节点打上highmem标签;
步骤2:在capacity scheduler中,创建两个队列,分别是hadoop和spark,其中hadoop队列可使用的标签是nornal和highmem,而spark则是highmem,并配置两个队列的capacity和maxcapacity。

如何配置使用Label based scheduling?
首先,要选择apache hadoop 2.6或hdp2.2(可使用ambari部署)发行版。
之后按照以下步骤操作:

步骤1:添加系统级别的label(相当于所有label的全集),注意,各个节点上的label必须都在系统级别的label中。
yarn rmadmin -addToClusterNodeLabels normal,highmem

步骤2:为各个节点分别添加label(可动态修改)
yarn rmadmin -replaceLabelsOnNode “nodeId,label1,label2,…,labeln”
注意,nodeId是nodemanager的唯一标示,注意,一个节点上可以有多个nodemanager,每个nodemanager的nodeid可以在ResourceManager界面上看到,通常有host和PRC port拼接而成,默认情况下,各个nodemanager的RPC port是随机选取的,你可以将所有的nodemanager配置成一样的,便于管理:
  1. <property>
  2. <name>yarn.nodemanager.address</name>
  3. <value>0.0.0.0:45454</value>
  4. </property>
复制代码

步骤3:配置label重启恢复功能。这样,label信息会保存到hdfs上(默认是保存在内存中的),之后yarn重新启动,可以自动恢复所有label信息:
  1. <property>
  2. <name>yarn.node-labels.manager-class</name>
  3. <value>org.apache.hadoop.yarn.server.resourcemanager.nodelabels.RMNodeLabelsManager</value>
  4. </property>
复制代码

步骤4:修改capacity scheduler相关配置,设置每个队列对应的label,以及每中label的资源上下限。具体配置,可参考相关资源。

总结
基于标签的调度策略是hadoop yarn新引入的feature,它能让YARN更好地运行在异构集群中,进而更好地管理和调度混合类型的应用程序。











参考

已有(13)人评论

跳转到指定楼层
tempmail 发表于 2015-3-24 01:30:09

谢谢楼主分享
回复

使用道具 举报

About_haoran 发表于 2015-3-24 15:48:44
多谢楼主分享
回复

使用道具 举报

luorihuanying 发表于 2015-3-25 10:04:52
感谢楼主分享
回复

使用道具 举报

hb1984 发表于 2015-3-25 18:30:19
谢谢楼主分享。      
回复

使用道具 举报

feng01301218 发表于 2015-3-26 21:50:29
感谢楼主分享
回复

使用道具 举报

ainubis 发表于 2015-3-27 16:23:28
学习啦(*^__^*) 嘻嘻……
回复

使用道具 举报

云晓翼 发表于 2015-3-30 16:01:29
感谢楼主分享
回复

使用道具 举报

lingfeng 发表于 2015-4-8 16:06:17
多谢楼主分享。。。
回复

使用道具 举报

12下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条