微信搜索lxw1234bigdata | 邀请体验:数阅–数据管理、OLAP分析与可视化平台 | 赞助作者:赞助作者

Yarn公平调度器Fair Scheduler根据用户组分配资源池

Hadoop lxw1234@qq.com 17422℃ 2评论

之前有文章《Hadoop多用户资源管理–Fair Scheduler介绍与配置》介绍过在Yarn中使用Fair Scheduler根据用户名为多用户管理分配资源。文本在其基础之上,介绍根据用户组管理分配资源池的配置。

假设在生产环境Yarn中,总共有四类用户需要使用集群,开发用户、测试用户、业务1用户、业务2用户。为了使其提交的任务不受影响,我们在Yarn上规划配置了五个资源池,分别为 dev_group(开发用户组资源池)、test_group(测试用户组资源池)、business1_group(业务1用户组资源池)、business2_group(业务2用户组资源池)、default(只分配了极少资源)。并根据实际业务情况,为每个资源池分配了相应的资源及优先级等。

ResourceManager上fair-scheduler.xml配置如下:

<?xml version="1.0"?>
<allocations>  
  <!-- users max running apps -->
  <userMaxAppsDefault>30</userMaxAppsDefault>
<queue name="root">
  <aclSubmitApps> </aclSubmitApps>
  <aclAdministerApps> </aclAdministerApps>
  
  <queue name="default">
          <minResources>2000mb,1vcores</minResources>
          <maxResources>10000mb,1vcores</maxResources>
          <maxRunningApps>1</maxRunningApps>
          <schedulingMode>fair</schedulingMode>
          <weight>0.5</weight>
          <aclSubmitApps>*</aclSubmitApps>
  </queue>
       
  <queue name="dev_group">
          <minResources>200000mb,33vcores</minResources>
          <maxResources>300000mb,90vcores</maxResources>
          <maxRunningApps>150</maxRunningApps>
          <schedulingMode>fair</schedulingMode>
          <weight>2.5</weight>
          <aclSubmitApps> dev_group</aclSubmitApps>
          <aclAdministerApps> hadoop,dev_group</aclAdministerApps>
  </queue>
                                                                                                                                                  
  <queue name="test_group">
          <minResources>70000mb,20vcores</minResources>
          <maxResources>95000mb,25vcores</maxResources>
          <maxRunningApps>60</maxRunningApps>
          <schedulingMode>fair</schedulingMode>
          <weight>1</weight>
          <aclSubmitApps> test_group</aclSubmitApps>
          <aclAdministerApps> hadoop,test_group</aclAdministerApps>
  </queue>
                                                                          
  <queue name="business1_group">
          <minResources>75000mb,15vcores</minResources>
          <maxResources>100000mb,20vcores</maxResources>
          <maxRunningApps>80</maxRunningApps>
          <schedulingMode>fair</schedulingMode>
          <weight>1</weight>
          <aclSubmitApps> business1_group</aclSubmitApps>
          <aclAdministerApps> hadoop,business1_group</aclAdministerApps>
  </queue>
                                                             
                                                                          
  <queue name="business2_group">
      <minResources>75000mb,15vcores</minResources>
      <maxResources>102400mb,20vcores</maxResources>
      <maxRunningApps>80</maxRunningApps>
      <schedulingMode>fair</schedulingMode>
      <weight>1</weight>
      <aclSubmitApps> business2_group</aclSubmitApps>
      <aclAdministerApps> hadoop,business2_group</aclAdministerApps>
  </queue>

</queue>
  <queuePlacementPolicy>
      <rule name="primaryGroup" create="false" />
      <rule name="secondaryGroupExistingQueue" create="false" />
      <rule name="default" />
  </queuePlacementPolicy>

</allocations>

这样,每个用户组下的用户提交任务时候,会到相应的资源池中,而不影响其他业务。

需要注意的是,所有客户端提交任务的用户和用户组的对应关系,需要维护在ResourceManager上,ResourceManager在分配资源池时候,是从ResourceManager上读取用户和用户组的对应关系的,否则就会被分配到default资源池。在日志中出现”UserGroupInformation: No groups available for user”类似的警告。而客户端机器上的用户对应的用户组无关紧要。

每次在ResourceManager上新增用户或者调整资源池配额后,需要执行下面的命令刷新使其生效:

yarn rmadmin -refreshQueues
yarn rmadmin -refreshUserToGroupsMappings

ss

如果觉得本博客对您有帮助,请 赞助作者

转载请注明:lxw的大数据田地 » Yarn公平调度器Fair Scheduler根据用户组分配资源池

喜欢 (16)
分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(2)个小伙伴在吐槽
  1. hi 楼主你好,yarn.nodemanager.resource.cpu-vcores yarn的这个参数,是机器的虚拟cpu,但是有的博客推荐物理cpu核数, 如果是24核,应该填24?还是留部分给系统?谢谢
    追寻2016-12-24 09:02 回复
  2. 有这么一个问题,有很多个部门 分了好几个部门的组,每个组下面有很多个用户,按照上面这种方法是没有问题的,可以实现不同组的用户到对应的组中去,但是 这个 只能统计到组的资源使用情况了,每个组下面的用户资源使用情况就拿不到了,我看了 yarn 的文档 https://hadoop.apache.org/docs/r2.7.1/hadoop-yarn/hadoop-yarn-site/FairScheduler.html,上面有一个 type = 'parent' 可以实现这种情景,大组下面的用户提交任务可以自动创建一个资源队列到组下面。但是 我配置了,发现 是可以归属到组下面,但是 对于 min max maxrunninapps 这些参数,子的资源队列不能继承到,会直接显示最大的资源配置。请问有碰到过这种情况吗?
    201701202017-03-06 21:00 回复