Yarn:如何利用完整的集群资源?

Yarn: How to utilize full cluster resources?

所以我有一个带有 7 个工作节点的 cloudera 集群。

以下是我发现的一些配置(来自 Google)在调整集群性能方面很重要。我是 运行:

现在我担心的是,当我查看 ResourceManager 时,我看到可用内存为 119 GB,这很好。但是,当我 运行 一项繁重的 sqoop 工作并且我的集群处于峰值时,它仅使用 ~59 GB 内存,而未使用 ~60 GB 内存。

我看到可以解决此未使用内存问题的一种方法是将 map|reduce.memory 增加到 4 GB,这样我们每个节点最多可以使用 16 GB。

其他方法是增加容器的数量,我不确定如何。

在这种情况下,提高集群性能的正确配置应该是什么。我可以增加容器的数量,比如每个核心 2 个容器吗?是否推荐?

如果您对集群配置有任何帮助或建议,我们将不胜感激。谢谢。

如果您的输入数据分为 26 个拆分,YARN 将创建 26 个映射器来并行处理这些拆分。

如果您有 7 个节点和 2GB 映射器用于 26 个拆分,则重新分区应该类似于:

  • 节点 1:4 个映射器 => 8 GB
  • 节点 2:4 个映射器 => 8 GB
  • 节点 3:4 个映射器 => 8 GB
  • 节点 4:4 个映射器 => 8 GB
  • 节点 5:4 个映射器 => 8 GB
  • 节点 6:3 个映射器 => 6 GB
  • 节点 7:3 个映射器 => 6 GB
  • 总计:26 个映射器 => 52 GB

因此,如果所有映射器同时 运行ning,则 map reduce 作业中使用的总内存将为 26x2=52 GB。也许如果你通过 reducer(s) 和 ApplicationMaster 容器添加内存用户,你可以在某个时候达到你的 59 GB,正如你所说的..

如果这是您所看到的行为,并且在这 26 个映射器之后完成了作业,那么就没有错。您只需要大约 60 GB 就可以通过将任务分散到所有节点来完成您的工作,而无需等待容器槽释放自己。其他免费的 60 GB 只是等待,因为您不需要它们。增加堆大小只是为了使用所有内存不一定会提高性能。

已编辑:

但是,如果您仍然有很多映射器等待安排,那么可能是因为您的安装配置为也使用 vcores 计算容器分配。这不是 Apache Hadoop 中的默认设置,但可以配置:

yarn.scheduler.capacity.resource-calculator : The ResourceCalculator implementation to be used to compare Resources in the scheduler. The default i.e. org.apache.hadoop.yarn.util.resource.DefaultResourseCalculator only uses Memory while DominantResourceCalculator uses Dominant-resource to compare multi-dimensional resources such as Memory, CPU etc. A Java ResourceCalculator class name is expected.

由于您将 yarn.nodemanager.resource.cpu-vcores 定义为 4,并且每个映射器默认使用 1 个 vcore,因此每个节点一次只能 运行 4 个映射器。

在那种情况下,您可以将 yarn.nodemanager.resource.cpu-vcores 的值加倍到 8。它只是一个任意值,它应该使映射器的数量加倍。