È un po 'non-intuitivo, ma si scopre il comando hdfs getconf
è in grado di controllare le proprietà di configurazione per filati e MapReduce, non solo 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
Un vantaggio dell'utilizzo di questo è che si vedrà il reale, i risultati finali di qualsiasi proprietà di configurazione come vengono effettivamente utilizzati per Hadoop. Questo spiegherebbe alcuni dei modelli di configurazione più avanzate, come l'uso di XInclude nei file XML o sostituzioni di proprietà, in questo modo:
<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>
Qualsiasi approccio di scripting che tenta di analizzare direttamente i file XML è improbabile che con precisione abbinare l'implementazione come avviene all'interno di Hadoop, quindi è meglio chiedere a Hadoop stessa.
Ci si potrebbe chiedere perché un comando hdfs
può ottenere le proprietà di configurazione per YARN e MapReduce. Ottima domanda! È in qualche modo una coincidenza dell'implementazione che deve iniettare un'istanza di MapReduce JobConf
in alcuni oggetti creati tramite reflection. Il codice in questione è visibile qui:
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
Questo codice viene eseguito come parte di eseguire il comando hdfs getconf
. Attivando un riferimento a JobConf
, forza il caricamento della classe e l'inizializzazione statica delle classi MapReduce e YARN pertinenti che aggiungono yarn-default.xml, yarn-site.xml, mapred-default.xml e mapred-site.xml al set di file di configurazione in vigore.
Poiché è una coincidenza dell'implementazione, è possibile che alcuni di questi comportamenti cambieranno nelle versioni future, ma sarebbe un cambiamento incompatibile con le versioni precedenti, quindi non cambieremmo questo comportamento all'interno dell'attuale Hadoop 2. x linea. La politica Apache Hadoop Compatibility si impegna a retrocompatibilità all'interno di una linea di versione principale, quindi è possibile attendersi che continui a funzionare almeno all'interno della riga di versione 2.x.
funziona come un fascino :) –
funziona ancora. grazie per la condivisione. –