Cloudera Hadoop 资源管理[未完待续]

本文为CDH官方文档Resource Management的译文,有不足之处还请指正。

动态资源池(Dynamic Resource Pools)

最小角色需求:Configurator (Cluster Administrator, Full Administrator也可以)

动态资源池(dynamic resource pool) 就是对YARN应用程序和Impala查询进行资源和策略分配的池。动态资源池允许安排和分配用户访问特定池,用来执行YARN应用程序和Impala查询的资源。如果一个池的资源未被使用,它可以被占用(preempted)并分配给其他池。否则,就根据各个池的权重来共享资源。访问控制列表(Access control lists (ACLs)) 对提交访问和管理访问进行限制。

配置集(configuration set)用来设定被激活的资源池有少资源可用。例如,您可以定义“白天”和“离线”配置集,您在白天和剩余时间指定不同的资源分配。

调度规则(scheduling rule)定义配置集被何时激活。配置集合中的配置按计划需求被传播到公平调度分配文件(fair scheduler allocation file)。更新后的文件存储在运行YARN ResourceManager角色的机器上,目录为/var/run/cloudera-scm-agent/process/nn-yarn-RESOURCEMANAGER。具体请查看See Server and Client Configuration

如果静态服务池(static service pools (cgroups))启用,则各服务所用的资源均受它的制约。例如静态池分给YARN总群集资源的75%则最多只能用75%的资源。

当你创建或修改了动态资源池的设定。Refresh Dynamics Resource PoolsDiscard Changes会显现。点击Refresh Dynamics Resource Pools 把配置传递到公平调度文件(默认为fair-scheduler.xml)。更新后的文件存储在运行YARN ResourceManager角色的机器上,目录为/var/run/cloudera-scm-agent/process/nn-yarn-RESOURCEMANAGER。具体请查看See Server and Client Configuration

至于怎么进行资源的合理分配,可以查看群集使用报表(Cluster Utilization Reports)

资源层次(Pool Hierarchy)

YARN资源池是可以嵌套的,子池受限于父池的设定。即允许您指定一组资源池,其资源由父资源所限制。每个子池可以对自己的资源进行限制;如果这些限制在父池的范围内,则可以生效,如果设定超过了父池,则会被限制。

你即创建一个池作为父池,也可以在一个池下面创建子池 ,一但池被设定为父池,那么你无法提交Job到这个池,必须提交到子池。

继续阅读:

管理动态资源池(Managing Dynamic Resource Pools)

在Cloudera Manager的主入口为Clusters > Cluster name > Dynamic Resource Pool Configuration 菜单项。

继续阅读:

查看动态资源池配置(Viewing Dynamic Resource Pool Configuration)

根据Cloudera Manager Resource Management描述的资源管理场景,动态资源池的页面显示标签如下:

  • YARN - Weight, Virtual Cores, Min and Max Memory, Max Running Apps, 及 Scheduling Policy
  • Impala Admission Control - Max Memory, Max Running Queries, Max Queued Queries, Queue Timeout, and Default Query Memory Limit

查看动态资源池配置:

1.选择Clusters > Cluster name > Dynamic Resource Pool Configuration. 如果群集中有YARN服务可在YARN > Resource Pools 标签显示. 如果群集中有Impala服务启用了动态资源池Impala Admission Control > Resource Pools 标签显示。
2.点击 YARNImpala Admission Control 标签。

创建YARN动态资源池 (Creating a YARN Dynamic Resource Pool)

有一个默认的资源池名为root.default.默认情况下所有YARN的应用程序都使用这个池。你可以创建额外的池区分不同应用程序组(诸如特定的应用程序或者你组织中的特定组)对其需求进行配置。

1.选择Clusters > Cluster name > Dynamic Resource Pool Configuration. 如果群集中有YARN服务可在YARN > Resource Pools 标签显示. 如果群集中有Impala服务启用了动态资源池Impala Admission Control > Resource Pools 标签显示。
2.点击YARN标签。
3.点击Create Resource Pool,建立资源池对话框显示,我们将看到设置集的标签。
4.指定该池的名字以及资源限制:
 • 在Resource Pool Name字段指定池名(仅限字母数字字符),如果表示用户或者组名中包含”.”, 把”.” 替换为 “dot“。
 • 要将池设置为父池,勾选Parent Pool单选框即可。
 • 选择configuration set. 设置相对其他资源池的权重(weight) , 最小最大内核及内存,以及在池中可运行应用程序的数量。
 • 点击Scheduling Policy标签并选择一个策略:
  ▪ Dominant Resource Fairness (DRF)(默认) - 根据 CPU 和内存公平调度资源。
  ▪ Fair (FAIR) - 仅根据内存公平调度资源。
  ▪ First-In, First-Out (FIFO) - 先进先出。
 • 如果你要启用公平调度占用(Fair Scheduler preemption),点击Preemption标签,然后设置一个时间来指定job需要等待多久才能占用其他池的资源。要启用preemption,请按照Enabling and Disabling Fair Scheduler Preemption操作。
 • 如果你有启用ACLs 并指定用户和组 可以点击SubmissionAdministration Access Control标签来指定哪个用户和组可以提交应用程序,及那些用户可以kill应用程序。默认情况下任何人都可以提交查看并且kill应用程序。用户和组请使用逗号分割,不允许出现空白字符。
5.点击Create
6.点击Refresh Dynamic Resource Pools

Impala启动与禁用动态资源池(Enabling and Disabling Dynamic Resource Pools for Impala)

默认情况下, Impala控制管理及动态资源池是关闭的。只有这两个一起凯子以后才会显示在动态资源池配置标签。启用或者关闭Impala动态资源池,按照Enabling and Disabling Impala Admission Control Using Cloudera Manager操作即可。

创建Impala动态资源池(Creating an Impala Dynamic Resource Pool)

有一个默认的资源池名为root.default.默认情况下当Impala开启动态资源池以后所有的查询都使用这个资源池。你可以创建额外的池区分不同组和查询(诸如特定的应用程序或者你组织中的特定组)对其需求进行配置。如,并行,内存使用,或service level agreement (SLA).每个池都有自己关于内存,查询数量,几timeout间隔的设置。

1.选择Clusters > Cluster name > Dynamic Resource Pool Configuration. 如果群集中有YARN服务可在YARN > Resource Pools 标签显示. 如果群集中有Impala服务启用了动态资源池Impala Admission Control > Resource Pools 标签显示。
2.点击Impala Admission Control标签。
3.点击Create Resource Pool
4.指定该池的名字以及资源限制:
 • 在Resource Pool Name字段指定池名(仅限字母数字字符)
 • 可以点击Submission Access Control标签指定那些用户和用户组可以提交查询。默认情况下,任何人都可以提交查询。要限制这个权限,选择可以执行操作用户和用户组,并用逗号分割。
5.点击Create
6.点击Refresh Dynamic Resource Pools

Impala动态资源池配置选项(Choosing Settings for an Impala Dynamic Resource Pool)

Impala动态资源池可以进行以下配置:

Max Memory

集群中总计的内存的最大数量,可用于在资源池中并发运行的所有查询。结合Default Query Memory Limit(默认查询内存限制)和集群中 Impala 主机的数量,Impala 确定出资源池中所有查询所使用的预期最大内存,并在达到内存上限后阻止任何其它的查询。

注意:如果你在动态资源池中指定Max Memory,那么Default Query Memory Limit同样需要设定。Max Memory依赖于Default Query Memory Limit限制,以产生一个可靠整体内存消耗的估计。

案例,考虑以下场景:

  • 群集中有五台数据节点有impalad守护进程。
  • 动态资源池的Max Memory被设定为100GB。
  • 这个池的Default Query Memory Limit为10GB,那么这个池的查询最多能用50GB的内存(默认查询内存限制*Impala节点数量)
  • 该池的Impala 最大查询并行数量为2,则可以最多使用100GB的内存。
  • 如果查询使用的内存量少于Default Query Memory Limit(每个节点)或Max Memory(整个群集)则对内存没有硬性规定。这些值只用来对池中并行查询使用资源的评估。
Max Running Queries

池中可以并行运行的最大查询数量。默认不做限制。任何超过Max Running Queries设定查询都需要在队列中等待,直到其他查询结束为止。你可以在早期资源管理阶段使用Max Running Queries, 当你没有大量数据占用内存进行查询的时候可以考虑去掉限制。

如果有很多小查询需要执行,建议你将这个值设高,或者直接保持“不限制”。如果一个查询耗用非常厉害,几个这样的查询并行执行就能榨干内存,I/O,CPU和网络,那么将这个值设低。以免超出Impala负载。

一旦你启用池中其他基于内存的控制设置,你仍然可以使用Max Running Queries把超出内存及最大并行查询评估的查询添加到队列中。

Max Queued Queries

队列中的最大查询数量。多出来的查询无法被添加到队列中,除非其他查询开始运行,减少了队列中查询的数量。默认值为200.一般来说这个值不需要被调整,如果有大量查询要排队,可以调整其他参数,比如超时间隔,或者增加池的容量。

Queue Timeout

在查询被取消之前,在队列中等待的时间,以毫秒为单位。默认值为60,000 (60 seconds)。

在下面的案例中Queue Timeout值并没有什么意义,你可以指定尽量高的值避免查询被异常的取消。

  • 低并行的环境中,只有少量或没有查询在队列中。
  • 在一个没有严格SLA的环境中,如果查询偶尔需要更长的时间,并没有太多问题。

你可能需要增加时间间隔,因为一些BI工具都有自己的查询超时时间设置。

在高并发的环境中,特别是严格SLA的情况下,长时间的等待会导致一系列严重问题。例如,如果一个查询需要运行10秒,你可以让它在8秒内完成,但是在队列中超过2秒的等待还是违反了SLA。像这种情况,设置一个低的超时值并监控有多少查询因超时而取消。可以帮你发现容量,调优和扩展的问题。并有助于避免资源浪费在早在队列中就违反SLA的昂贵查询。

如果你可以确定那些查询会导致高超时,有些则不会,可以将分别为他们创建池,并设置不同的值。

Default Query Memory Limit

池中每个查询的内存限制。这个值表示查询在每个节点上能用的最大内存。如果查询使用内存超过这个值则会激活spill-to-disk,如果内存过低则会导致查询被取消。IMpala将default memory limit 与 Impala节点数相乘评估Max Memory同时运行多少个查询。

克隆资源池(Cloning a Resource Pool)

要创建一个与现有池相同的属性的新池,您可以复制一个池:

1.选择Clusters > Cluster name > Dynamic Resource Pool Configuration. 如果群集中有YARN服务可在YARN > Resource Pools 标签显示. 如果群集中有Impala服务启用了动态资源池Impala Admission Control > Resource Pools 标签显示
2.点击YARNImpala Admission Control标签
3.点击一个资源池行旁边的▼并选择Clone
4.指定名字和相关属性
5.点击Create
6.点击Refresh Dynamic Resource Pools

删除资源池(Deleting a Resource Pool)

要删除一个池:

1.选择Clusters > Cluster name > Dynamic Resource Pool Configuration. 如果群集中有YARN服务可在YARN > Resource Pools 标签显示. 如果群集中有Impala服务启用了动态资源池Impala Admission Control > Resource Pools 标签显示
2.点击YARNImpala Admission Control标签
3.点击一个资源池行旁边的▼并选择Delete
4.点击OK
5.点击Refresh Dynamic Resource Pools

编辑动态资源池(Editing Dynamic Resource Pools)

1.选择Clusters > Cluster name > Dynamic Resource Pool Configuration. 如果群集中有YARN服务可在YARN > Resource Pools 标签显示. 如果群集中有Impala服务启用了动态资源池Impala Admission Control > Resource Pools 标签显示
2.点击YARNImpala Admission Control标签
3.点击一个资源池行旁边的Edit按钮并修改属性
4.如果你开启了ACLs并且指定了用户和用户组,可以点击SubmissionAdministration Access Control标签来指定那些用户和组可以提交应用程序或者查看关闭应用。默认情况下任何人都可以提交,查看,和关闭应用程序。要限制这个权限,选择可以执行操作用户和用户组,并用逗号分割。
5.点击Save
6.点击Refresh Dynamic Resource Pools

YARN池状态及配置项(YARN Pool Status and Configuration Options)

继续阅读:

查看动态资源池状态(Viewing Dynamic Resource Pool Status)

用以下一种方法:

  • Cluster

1.选择Clusters > Cluster name > Dynamic Resource Pool Configuration. YARN > Resource Pools标签显示
2.点击View Dynamic Resource Pool Status

  • YARN 服务

1.进入YARN服务
2.点击Resource Pools标签

更多信息请查看Monitoring Dynamic Resource Pools

配置默认YARN公平调度属性(Configuring Default YARN Fair Scheduler Properties)

默认属性信息请参考Configuring the Fair Scheduler

1.选择Clusters > Cluster name > Dynamic Resource Pool Configuration. YARN > Resource Pools标签显示
2.点击YARN标签
3.点击Default Settings按钮
4.指定默认默认调度规则, 最大运行应用程序数, 优先权超时时间的属性
5.点击Save
6.点击Refresh Dynamic Resource Pools

创建一个子池(Creating a Resource Subpool)

YARN资源池可以嵌套. 手动创建子池如下:

1.选择Clusters > Cluster name > Dynamic Resource Pool Configuration. YARN > Resource Pools标签显示
2.点击一个资源池行旁边的▼并选择Create Subpool.配置子池属性
3.点击Create
4.点击Refresh Dynamic Resource Pools

设置YARN用户限制(Setting YARN User Limits)

池属性设定可以在池中运行的应用程序的最大数量。也可以同事限制特定用户的应用程序的数量:

1.选择Clusters > Cluster name > Dynamic Resource Pool Configuration. YARN > Resource Pools标签显示
2.点击User Limits标签.表中显示了用户可运行程序数量列表及每个用户可以提交的最大应用数量
3.点击Add User Limit
4.指定用户名(仅限字母数字字符),如果表示用户或者组名中包含”.”, 把”.” 替换为 “dot“。
5.指定应用程序最大运行数量
6.点击Create
7.点击Refresh Dynamic Resource Pools

配置ACLs(Configuring ACLs)

要配置哪些用户和组可以提交和杀死任何资源池中的应用程序:

1.启用ACLs
2.选择Clusters > Cluster name > Dynamic Resource Pool Configuration. YARN > Resource Pools标签显示
3.点击Other Settings按钮
4.在Admin ACL属性中指定可以提交和杀死应用的用户及用户组
5.点击Save Changes提交变更
6.点击Cloudera Manager logo返回首页
7.进入群集重启向导
8.点击Restart Stale Services
9.点击Restart Now
10.点击Finish

启用ACLs(Enabling ACLs)

1.选择Clusters > Cluster name > Dynamic Resource Pool Configuration. YARN > Resource Pools标签显示
2.点击Other Settings按钮
3.在Enable ResourceManager ACLs属性中点击YARN服务
4.点击Save Changes提交变更
5.点击Cloudera Manager logo返回首页
6.进入群集重启向导
7.点击Restart Stale Services
8.点击Restart Now
9.点击Finish

使用配置集进行资源分配(Defining Resource Allocations with Configuration Sets)

配置集(configuration set)用来设定被激活的资源池有少资源可用。例如,您可以定义“白天”和“离线”配置集,您在白天和剩余时间指定不同的资源分配。

通过创建调度规则来激活配置集,创建配置集之后你可以配置它的属性,如权重,最小最大内存和CPU,最大运行程序数量等。

设置配置集属性(Specifying Configuration Set Properties)

1.选择Clusters > Cluster name > Dynamic Resource Pool Configuration. 如果群集中有YARN服务可在YARN > Resource Pools 标签显示. 如果群集中有Impala服务启用了动态资源池Impala Admission Control > Resource Pools 标签显示
2.点击Resource Pools按钮
3.对于每个资源池,请单击Edit按钮
 a.选择一个配置集名字
 b.配置配置集属性并点击Save
4.点击Refresh Dynamic Resource Pools

配置集示例(Example Configuration Sets)

Daytime设定了production池,权重比development池大5倍:
weekdaycs

Off Hourproductiondevelopment权重一样。
weekendcs

具体配置方式请查看example scheduling rules

查看配置集的属性(Viewing the Properties of a Configuration Set)

1.选择Clusters > Cluster name > Dynamic Resource Pool Configuration. 如果群集中有YARN服务可在YARN > Resource Pools 标签显示. 如果群集中有Impala服务启用了动态资源池Impala Admission Control > Resource Pools 标签显示

2.在Configuration Sets下拉列表中,选择一个配置集。查看每个池的属性。

调度配置设置(Scheduling Configuration Sets)

调度规则(scheduling rule)定义配置集被何时激活。配置集合中的配置按计划需求被传播到公平调度分配文件(fair scheduler allocation file)。更新后的文件存储在运行YARN ResourceManager角色的机器上,目录为/var/run/cloudera-scm-agent/process/nn-yarn-RESOURCEMANAGER。具体请查看See Server and Client Configuration

调度规则示例(Example Scheduling Rules)

根据Daytime and Off Hour配置集。指定配置设置是白天活动每天从上午8:00到下午5:00,下班后的配置集是活动的其他时间(晚上和周末),定义如下规则:
rule

添加调度规则(Adding a Scheduling Rule)

1.选择Clusters > Cluster name > Dynamic Resource Pool Configuration. 如果群集中有YARN服务可在YARN > Resource Pools 标签显示. 如果群集中有Impala服务启用了动态资源池Impala Admission Control > Resource Pools 标签显示
2.点击Scheduling Rules标签
3.点击Create Scheduling Rule
4.在配置设置字段中,选择规则要应用的配置集。选择Create NewUse Existing
5.如果您创建了一个新的配置集,在名称字段中键入一个名称。如果使用现有的配置集,从下拉列表中选择一个。
6.设置重复频率
 • 选择重复的字段及频率
 • 如果规则不重复,清除重复字段,请单击字段左侧,以显示一个下拉日历,在那里设置开始日期和时间。点击右侧调整日期和时间,确定结束日期。
7.点击Create
8.点击Refresh Dynamic Resource Pools

重排调度规则(Reordering Scheduling Rules)

1.选择Clusters > Cluster name > Dynamic Resource Pool Configuration. 如果群集中有YARN服务可在YARN > Resource Pools 标签显示. 如果群集中有Impala服务启用了动态资源池Impala Admission Control > Resource Pools 标签显示
2.点击Scheduling Rules标签
3.点击Reorder Scheduling Rules
4.点击Move UpMove Down进行调整
5.点击Save
6.点击Refresh Dynamic Resource Pools

编辑调度规则(Editing a Scheduling Rule)

1.选择Clusters > Cluster name > Dynamic Resource Pool Configuration. 如果群集中有YARN服务可在YARN > Resource Pools 标签显示. 如果群集中有Impala服务启用了动态资源池Impala Admission Control > Resource Pools 标签显示
2.点击Scheduling Rules
3.点击规则右边的Edit按钮
4.编辑规则
5.点击Save
6.点击Refresh Dynamic Resource Pools

删除调度规则(Deleting a Scheduling Rule)

1.选择Clusters > Cluster name > Dynamic Resource Pool Configuration. 如果群集中有YARN服务可在YARN > Resource Pools 标签显示. 如果群集中有Impala服务启用了动态资源池Impala Admission Control > Resource Pools 标签显示
2.点击Scheduling Rules
3.点击▼并选择Delete
4.点击OK
5.点击Refresh Dynamic Resource Pools

将应用程序及查询分配资源池(Assigning Applications and Queries to Resource Pools)

应用程序和查询运行的时候你可以指定某个池执行。要指定应用程序使用的池,通过参数mapreduce.job.queuename可以显示地指定一个Yarn应用程序运行所在的资源池 (每个应用程序的运行都必须在资源池)。要指定查询使用的池需要在REQUEST_POOL选项中指定池名。

Cloudera Managery允许你设置一个规则列表来分配应用程序和查询使用的池。你也可以在YARN fair scheduler configuration设定默认池。

有些规则允许你创建动态资源池中有没有的池。允许创建池是可选的。如果一个满足一个规则但是你又没创建池,YARN会直接创建一个没有配置资源和管理的池。

如果没有任何满足规则,那么这个YARN应用程序或者Impala查询不会被执行。

放置规则排序与评估(Placement Rule Ordering and Evaluation)

池的放置规则以它们出现在放置规则列表中的顺序进行评估。当提交作业时,将对规则进行评估,并使用第一个匹配规则来确定运行作业的池中的池中的。

如果有一个规则总是满足条件,则随后的规则不被评估。 如果规则不会被命中,那么将显示为灰色的,请参见示例放置规则

默认情况下,池放置规则为倒叙排列;当它们被添加时,最后一个规则添加出现第一个。你可以很容易地重新排序规则

创建池放置规则(Creating Pool Placement Rules)

放置规则Placement rules 指定应用程序及查询使用哪个池。 默认情况下Cloudera已经有设置了一组默认规则

创建放置规则:

1.选择Clusters > Cluster name > Dynamic Resource Pool Configuration. 如果群集中有YARN服务可在YARN > Resource Pools 标签显示. 如果群集中有Impala服务启用了动态资源池Impala Admission Control > Resource Pools 标签显示
2.点击YARN或者Impala Admission Control标签
3.点击Placement Rules标签
4.点击Create Placement Rule,在Type下拉列表中选择指定池名称的规则,并选择它在池层次结构中的位置:
 • YARN
  ▪ specified at run time - 使用 root.[pool name],其中pool name是运行时指定的池的名称。
  ▪ root.users.[username] - 使用父池root.users,以提交应用程序的用户名在该吃中创建以用户名为池名的子池。在CDH 5.1 及以上版本root.users父池及该规则默认被创建。不过从Cloudera Manager 5.7 或更低版本升级,池和放置规则都不会被添加。
  ▪ root.default - 使用root.default池
  ▪ root.[pool name] - 这里的pool name是你在Pool Name中指定的池名。
  ▪ root.[primary group] - 使用与用户提交应用程序的主组相匹配的池。
  ▪ root.[secondary group] - 使用与提交应用程序的用户的次组相匹配的池。
  ▪ root.[username] - 使用与提交应用程序的用户的名称相匹配的池。
  ▪ root.[primary group].[username] - 父池匹配提交程序用户的主组,然后根据用户名创建子池。
  ▪ root.[secondary group].[username] - 父池匹配提交程序用户的次组,然后根据用户名创建子池。
 • Impala
  ▪ specified at run time - 使用 root.[pool name],其中pool name是运行时指定的池的名称。
  ▪ root.default - 使用root.default池
  ▪ root.[pool name] - 这里的pool name是你在Pool Name中指定的池名。
  ▪ root.[primary group] - 使用与用户提交应用程序的主组相匹配的池。
  ▪ root.[secondary group] - 使用与提交应用程序的用户的次组相匹配的池。
  ▪ root.users.[username] - 使用父池root.users,以提交应用程序的用户名在该吃中创建以用户名为池名的子池。
  有关这些规则的更多信息,参见配置文件格式中queueplacementpolicy的描述。
5.如果要在运行的时候创建不存在的池,需要勾选Create pool if it does not exist单选框(仅限YARN)
6.点击Create 规则被添加到放置规则列表的顶部,并成为评估的第一条规则。
7.点击Refresh Dynamic Resource Pools

默认放置规则和顺序(Default Placement Rules and Order)

YARN默认放置规则和顺序是:

1.pool specified at run time and create the pool if it does not exist.
2.pool root.users.[username].
3.pool root.default.
参见Example Placement Rules

Impala默认放置规则和顺序是:

1.pool specified at run time, only if the pool exists.
2.root.default.

重排放置规则(Reordering Pool Placement Rules)

要更改池放置规则的顺序:
1.选择Clusters > Cluster name > Dynamic Resource Pool Configuration. 如果群集中有YARN服务可在YARN > Resource Pools 标签显示. 如果群集中有Impala服务启用了动态资源池Impala Admission Control > Resource Pools 标签显示
2.点击YARNImpala Admission Control标签。
3.点击Placement Rules标签
4.点击Reorder Placement Rules
5.点击Move UpMove Down移动规则
6.点击Save
7.点击Refresh Dynamic Resource Pools

放置规则举例(Example Placement Rules)

下面的图片显示了YARN的默认池放置规则设置:
default_placement

如果在运行时指定了一个池,该池用于作业,如果它不存在,则创建该池。如果运行时没有指定池,则根据提交作业用户名在root.users池创建子池。还是没法用(比如root.users是子池),那么使用root.default池。

如果你把规则2下移一行,他就会被屏蔽,因为前面一个规则(root.default)总会被匹配。.

users_placement

打赏支持:如果你觉得我的文章对你有所帮助,可以打赏我哟。