从命令行获取纱线配置

时间:2016-01-07 22:31:04

标签: hadoop yarn hadoop2 emr elastic-map-reduce

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

例如,我想做类似的事情

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

1 个答案:

答案 0 :(得分:23)

它有点不直观,但事实证明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的引用,它强制添加yarn-default.xml,yarn-site.xml,mapred-default.xml和mapred-site.xml的相关MapReduce和YARN类的类加载和静态初始化到有效的配置文件集。

由于实施的巧合,可能会在未来版本中改变某些行为,但这将是一个向后不兼容的变化,所以我们绝对不会改变当前Hadoop 2.x行中的行为。 Apache Hadoop Compatibility策略承诺在主要版本行中向后兼容,因此您可以相信这将至少在2.x版本行中继续工作。