Fair Scheduler称为公平调度器,是Apache YARN内置的调度器。公平调度器主要目标是实现YARN上运行的应用能公平的分配到资源,其中各个队列使用的资源根据设置的权重(weight)来实现资源的公平分配。

前提条件

已创建Hadoop集群,详情请参见创建集群

注意事项

开启集群的Fair Scheduler资源队列后,YARN组件配置中的fair-scheduler配置区域将处于冻结状态,相关已有配置将会同步到集群资源管理页面中。如果需要继续在YARN服务的配置页面通过XML的方式设置集群资源,则需先在集群资源管理中关闭YARN资源队列。

配置Fair Scheduler

  1. 进入集群资源管理页面。
    1. 登录阿里云E-MapReduce控制台
    2. 在顶部菜单栏处,根据实际情况选择地域和资源组
    3. 单击上方的集群管理页签。
    4. 集群管理页面,单击相应集群所在行的详情
    5. 在左侧导航栏中,单击集群资源管理
  2. 开启Fair Scheduler。
    1. 集群资源管理页面,打开开启YARN资源队列开关。
    2. 单击Fair Scheduler
      说明 首次使用资源管理功能时,资源队列类型默认为Capacity Scheduler
    3. 单击保存
  3. 集群资源管理页面,单击上方的资源队列配置
  4. 队列配置区域,配置队列信息。
    • 单击编辑,可以更改资源队列。
    • 单击更多 > 创建子队列,可以创建子队列。

      default队列无法创建子队列。

    root为一级队列,是所有队列的父队列,管理YARN的所有资源,默认root下只有default队列。

    注意 因为队列配置是嵌套的,所以父队列的参数优先级会高于子队列。当子队列设置的资源用量大于父队列时,在调度器分配资源时,会以父队列的参数设置为限制。
    • 设置新队列名称,资源队列名称是必填项,队列名称中不能包含英文句号(.)。
    • 设置调度器权重,权重是必填项。调度器给队列分配资源时,达到设置的权重时,会认为达到公平状态。该权重同时在各个二级、三级以及更深级别的队列生效,如在同一父队列下面的两个子队列权重分别为2和1,则在2个子队列中都有任务运行时,达到2:1的资源分配比例,会认为达到了公平状态。
    • 最大资源量表示该队列能被分配到的最大资源量,应该大于最小资源量,小于集群YARN所能控制的资源规模。如果设置的大于集群资源规模,生效值是YARN所能控制的资源规模。例如,YARN管理的VCore为16个,但最大资源量设置为20,实际生效为16。
    • 在程序运行时,如果不指定提交队列,默认会提交到default队列。
    • 修改子队列名称,如果修改子节点队列名称后,没有重启ResourceManager,任务仍然能提交到原队列名称,但EMR控制台队列配置不会再显示。重启ResourceManager后,原队列将不再存在。
    • 删除队列时,如果删除的不是root的子队列(即非二级队列),删除后单击部署生效即可;如果删除的是root的子队列,需要选择操作 > 重启ResourceManager,修改才能生效。

切换调度器类型

开启YARN资源队列后,可以执行以下步骤切换调度器类型。
注意 切换资源调度器后,需要重启服务,才能生效。
  1. 集群资源管理页面,单击上方的切换调度器
  2. 单击需要切换的资源队列类型。
  3. 单击保存
  4. 重启服务。
    1. 集群资源管理页面,选择操作 > 重启ResourceManager
    2. 执行集群操作对话框中,设置相关参数,单击确定
    3. 确认对话框中,单击确定
      待提示操作成功时,表示切换调度器类型成功。

关闭资源队列

说明 关闭资源队列后,不能在资源管理页面进行任何操作,如果您需要再次配置资源,可以开启资源队列或者在YARN组件配置页面中的fair-scheduler配置区域进行操作 。
  1. 在集群资源管理页面,关闭开启YARN资源队列开关。
  2. 关闭资源队列对话框中,单击确定

提交作业

提交到指定队列时需通过mapreduce.job.queuename参数来指定队列,示例如下。
`hadoop jar /usr/lib/hadoop-current/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.5.jar pi -Dmapreduce.job.queuename=test  2 2`