揭秘Apache Hadoop YARN,第2部分:全局配置基础[译]

在本系列的第1部分,我们介绍了YARN集群的基本原理。在第2部分中,您将了解在集群上运行的其他组件以及它们如何影响YARN集群配置。

理想的YARN资源分配

如上一篇文章所示,YARN集群可以配置为使用集群上的所有资源。

现实情况YARN的资源分配

在实际情况中,有两个原因不能让YARN使用全部资源:

1.非Apache Hadoop服务也需要在节点上运行(开销)。
2.其他与Hadoop相关的组件需要专用资源,不能与YARN共享(如运行CDH时)。

操作系统(开销)

任何节点需要一个操作系统才能工作。运行任何操作系统都需要预留一些资源。最常见的Hadoop操作系统是Linux。

Cloudera Manager Agents (管理)

Cloudera Manager是Cloudera的CDH集群管理工具。 Cloudera Manager Agent是在每个工作节点上运行的程序,用于跟踪其运行状况并处理其他管理任务(如配置部署)。

HDFS Cluster (Required) (Master/NameNode, Worker/DataNode)

这篇文章有意地省略了HDFS的任何讨论,HDFS是一个必需的Hadoop组件。对于我们讲述的内容而言,记住以下两点:

  • Master节点守护程序称为NameNode
  • Worker节点守护程序称为DataNode

对于Hadoop安装,Cloudera建议HDFS DataNode和YARN NodeManager在集群中的同一组Worker节点上运行。 DataNode需要预留一些基本资源用于正确的操作。这可以在下面的Figure 1中看到。

Figure 1: Master node with NameNode. Worker nodes with DataNode.
Figure 1: Master node with NameNode. Worker nodes with DataNode.

HBase Cluster Requirements (CDH)

如果集群配置为使用Apache HBase,则应为RegionServer预留每个工作节点上的资源。预留的内存量尽可能大。

Impala Cluster Requirements (CDH)

如果集群配置为使用Impala,则应为Impala后台驻留程序留出每个工作节点上的资源。预留的内存量尽可能大。

YARN NodeManagers (Required)

NodeManager还需要预留一些资源以便正常操作。

分配剩余的资源给YARN

一旦将资源分配给上述各种组件,剩余的可以分配给YARN。 (注意:本文没有具体的建议,因为一个节点的硬件规格随着时间的推移而持续改进,具体数字的例子请参考这个调优指南;还可以参考Tuning the Cluster for MapReduce v2 (YARN)

应用配置

计算最终属性后,可以在yarn-site.xml或Cloudera Manager的YARN Configuration部分中输入。一旦这些属性配置到集群中,您可以验证它们。

在RM UI中验证YARN配置

如前所述,ResourceManager有YARN集群上可用资源的快照。

示例:假设您在50个Worker节点上具有以下配置:

1.yarn.nodemanager.resource.memory-mb = 90000
2.yarn.nodemanager.resource.vcores = 60

计算下来你群集的总资源是:

1.memory: 5090GB=4500GB=4.5TB
2.vcores: 50
60 vcores= 3000 vcores

在ResourceManager Web UI页面上,集群指标表显示集群的总内存和总vcores,如下面的Figure 2所示。

Figure 2: Verifying YARN Cluster Resources on ResourceManager Web UI
Figure 2: Verifying YARN Cluster Resources on ResourceManager Web UI

Container 配置

此时,YARN集群根据资源正确设置。 YARN使用这些资源进行分配,并对集群实施限制。

YARN Container Memory Sizing
  Minimum:yarn.scheduler.minimum-allocation-mb
  Maximum: yarn.scheduler.maximum-allocation-mb
YARN Container VCore Sizing
  Minimum: yarn.scheduler.minimum-allocation-vcores
  Maximum: yarn.scheduler.maximum-allocation-vcores
YARN Container Allocation Size Increments
  Memory Increment: yarn.scheduler.increment-allocation-mb
  VCore Increment: yarn.scheduler.increment-allocation-vcores

Container限制及建议值:

Memory 属性:
  yarn.scheduler.minimum-allocation-mb最低值为0
  任何内存大小调整属性必须小于或等于yarn.nodemanager.resource.memory-mb
  最大值必须大于或等于最小值。
VCore 属性:
  yarn.scheduler.minimum-allocation-vcores最低值为0
  任何vcore大小调整属性必须小于或等于yarn.nodemanager.resource.vcores
  最大值必须大于或等于最小值
  对yarn.scheduler.increment-allocation-vcores的建议值为1。较高的值可能比较浪费。

注意,在YARN中有一些非常易犯的误配置。如果容器内存请求最小值(yarn.scheduler.minimum-allocation-mb)大于每个节点(yarn.nodemanager.resource.memory-mb)可用的内存,那么YARN将不可能满足该请求。类似参数有yarn.scheduler.minimum-allocation-vcores

MapReduce 配置

Map任务内存属性为mapreduce.map.memory.mb。 Reduce任务的内存属性是mapreduce.reduce.memory.mb。由于这两种类型的任务必须适合容器,所以该值应小于容器最大大小。 (我们不会详细介绍Java和影响启动Java虚拟机的YARN属性,它们可能会在以后的文章中讨论)。

ApplicationMaster内存配置
属性yarn.app.mapreduce.am.resource.mb用于设置ApplicationMaster的内存大小。由于ApplicationMaster必须适合容器,该属性应小于容器最大值

Conclusion

本文我们讲述了以下事情:

1.了解YARN专用群集情况下的基本群集配置。
2.YARN群集基本配置,同时考虑防止将所有资源分配给YARN,考虑以下配置:
  操作系统开销(Linux,Windows)
  管理服务,例如Cloudera Manager Agent
  必要的服务,如HDFS
  Master/Worker服务(HBase,Impala)
  剩余资源给YARN。
3.知道在哪里查看集群的配置。
4.了解需要进一步调整基于在群集上运行的应用程序的分析。还有请注意可能有其他配置开销没有列在此帖中。

Next Time…

第三部分我们将介绍YARN的基本调度。

Ray Chiang是Cloudera的软件工程师。

Dennis Dawson是Cloudera的高级技术撰稿人。

原文地址Untangling Apache Hadoop YARN, Part 2: Global Configuration Basics

打赏支持:支付宝/微信,感谢赏口饭吃