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

开启Fair Scheduler

注意 开启集群资源队列后,YARN组件配置中的fair-scheduler配置区域将处于冻结状态,相关已有配置将会同步到集群资源管理页面中。如果需要继续在YARN服务的配置页面通过XML的方式设置集群资源,则需先在集群资源管理中关闭YARN资源队列。
  1. 登录阿里云E-MapReduce控制台
  2. 在顶部菜单栏处,根据实际情况选择地域(Region)和资源组
  3. 单击上方的集群管理页签。
  4. 集群管理页面,单击相应集群所在行的详情
  5. 在左侧导航栏中,单击集群资源管理
  6. 集群资源管理页面,单击开启YARN资源队列
  7. 单击Fair Scheduler
  8. 单击保存

配置Fair Scheduler

开启YARN资源队列后,可以执行以下步骤配置Fair Scheduler。

  1. 集群资源管理页面,单击上方的资源队列配置
  2. 队列配置区域,可单击编辑更改资源队列。

    单击更多 > 创建子队列,可创建子队列。

    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. 单击操作 > 重启ResourceManager
  5. 执行集群操作对话框中,设置相关参数,单击确定
  6. 确认对话框中,单击确定
    待提示操作成功时,表示切换调度器类型成功。

提交作业

提交到指定队列时需通过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`