从命令行获取纱线配置

Get a yarn configuration from commandline

在 EMR 中,有没有办法使用 yarn 命令在给定配置密钥的情况下获取配置的特定值?

例如我想做这样的事情

yarn get-config yarn.scheduler.maximum-allocation-mb

有点non-intuitive,但事实证明 hdfs getconf 命令能够检查 YARN 和 MapReduce 的配置属性,而不仅仅是 HDFS。

> hdfs getconf -confKey fs.defaultFS
hdfs://localhost:19000

> hdfs getconf -confKey dfs.namenode.name.dir
file:///Users/chris/hadoop-deploy-trunk/data/dfs/name

> hdfs getconf -confKey yarn.resourcemanager.address
0.0.0.0:8032

> hdfs getconf -confKey mapreduce.framework.name
yarn

使用它的一个好处是您将看到 Hadoop 实际使用的任何配置属性的实际、最终结果。这将解释一些更高级的配置模式,例如在 XML 文件中使用 XInclude 或 属性 替换,如下所示:

  <property>
    <description>The address of the applications manager interface in the RM.</description>
    <name>yarn.resourcemanager.address</name>
    <value>${yarn.resourcemanager.hostname}:8032</value>
  </property>

任何尝试直接解析 XML 文件的脚本方法都不太可能准确匹配在 Hadoop 内部完成的实现,因此最好询问 Hadoop 本身。

您可能想知道为什么 hdfs 命令可以获得 YARN 和 MapReduce 的配置属性。好问题!需要将 MapReduce 的 JobConf 的实例注入通过反射创建的某些对象的实现有点巧合。相关代码可见:

https://github.com/apache/hadoop/blob/release-2.7.1/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/util/ReflectionUtils.java#L82-L114

此代码作为 运行 hdfs getconf 命令的一部分执行。通过触发对 JobConf 的引用,它会强制 class 加载和静态初始化相关的 MapReduce 和 YARN classes 添加 yarn-default.xml, yarn-site.xml、mapred-default.xml 和 mapred-site.xml 到有效的配置文件集。

由于实现的巧合,此行为的某些部分可能会在未来的版本中发生变化,但这将是 backwards-incompatible 变化,因此我们绝对不会在当前版本中更改该行为Hadoop 2.x 行。 Apache Hadoop Compatibility 策略在主要版本行中提交到 backwards-compatibility,因此您可以相信它至少会在 2.x 版本行中继续工作。