10.3 Hadoop队列管理机制

在学习Capacity Scheduler和Fair Scheduler之前,我们先要了解Hadoop的用户和作业管理机制,这是任何Hadoop可插拔调度器的基础。

Hadoop以队列为单位管理作业、用户和资源,整个Hadoop集群被划分成若干个队列,每个队列被分配一定的资源,且用户只能向对应的一个或者几个队列中提交作业。Hadoop队列管理机制由用户权限管理和系统资源管理两部分组成,下面依次进行介绍。

1.用户权限管理

Hadoop的用户管理模块构建在操作系统用户管理之上,增加了“队列”这一用户组织单元,并通过队列建立了操作系统用户和用户组之间的映射关系。管理员可配置每个队列对应的操作系统用户和用户组(需要注意的是,Hadoop允许一个操作系统用户或者用户组对应一个或者多个队列),也可以配置每个队列的管理员。他可以杀死该队列中任何作业,改变任何作业的优先级等。

Hadoop集群中所有队列需在配置文件mapred-site.xml中设置,这意味着该配置信息不可以动态加载。

【实例】如果一个集群中有四个队列,分别是queueA、queueB、queueC和default,那么可以在mapred-site.xml中配置如下:


<property>

<name>mapred.queue.names</name>

<value>queueA, queueB, queueC, default</value>

<description>Hadoop中所有队列名称</description>

</property>

<property>

<name>mapred.acls.enabled</name>

<value>true</value>

<description>是否启用权限管理功能</description>

</property>


队列权限相关的配置选项在配置文件mapred-queue-acls.xml中设置,这些信息可以动态加载。

【实例】如果规定用户linux_userA和用户组linux_groupA可以向队列queueA中提交作业,用户linux_groupA_admin可以管理(比如杀死任何一个作业或者改变任何作业的优先级)队列queueA,那么可以在mapred-queue-acls.xml中配置如下:


<configuration>

<property>

<name>mapred.queue.queueA.acl-submit-job</name>

<value>linux_userA linux_groupA</value>

</property>

<property>

<name>mapred.queue.queueA.acl-administer-jobs</name>

<value>linux_groupA_admin</value>

</property>

<!—配置其他队列.—>

</configuration>


2.系统资源管理

Hadoop资源管理由调度器完成。管理员可在调度器中设置各个队列的资源容量、各个用户可用资源量等信息,而调度器则按照相应的资源约束对作业进行调度。考虑到系统中的队列信息是在mapred-site.xml中设置的,而队列资源分配信息在各个调度器的配置文件中设置,因此,这两个配置文件中的队列信息应保持一致是十分重要的。如果调度器中的某个队列在mapred-site.xml中没有设置,则意味着该队列中的资源无法得到使用。

通常而言,不同的调度器对资源管理的方式是不同的。接下来将介绍Capacity Scheduler和Fair Scheduler两个调度器的工作原理。