在EMR中,有没有一种方法可以使用yarn
命令获得给定配置密钥的配置的特定值?
例如,我想做一些类似的事情
yarn get-config yarn.scheduler.maximum-allocation-mb
这有点不直观,但事实证明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
的引用,它强制类加载和相关MapReduce和YARN类的静态初始化,这些类将YARN-default.xml、YARN-site.xml、mapred-default.xml和mapred-site.xml添加到有效的配置文件集。
由于这是实现的巧合,在未来的版本中,这种行为可能会发生一些变化,但这将是一种向后不兼容的变化,因此我们绝对不会在当前的Hadoop2.x行中改变这种行为。Apache Hadoop兼容性策略承诺在主版本行中实现向后兼容性,因此您可以相信这将至少在2.x版本行中继续工作。