在EMR中,有没有办法使用yarn
命令获取配置密钥的配置的特定值?
例如,我想做类似的事情
yarn get-config yarn.scheduler.maximum-allocation-mb
答案 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
的实例注入到通过反射创建的某些对象中,这有点巧合。相关代码在此处可见:
此代码作为运行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版本行中继续工作。