2014-10-06 22 views
18

voglio accedere HDFS con nomi completi quali:Trova numero di porta dove HDFS è in ascolto

hadoop fs -ls hdfs://machine-name:8020/user 

potrei anche semplicemente accedere HDFS con

hadoop fs -ls /user 

Tuttavia, vi scrivo casi di test che dovrebbe funzionare su diverse distribuzioni (HDP, Cloudera, MapR ... ecc.) che comporta l'accesso ai file hdfs con nomi qualificati.

Capisco che hdfs://machine-name:8020 sia definito in core-site.xml come fs.default.name. Ma questo sembra essere diverso su diverse distribuzioni. Ad esempio, hdfs è maprfs su MapR. IBM BigInsights non ha nemmeno core-site.xml in $HADOOP_HOME/conf.

Non sembra esserci un modo in cui hadoop mi dice cosa è definito in fs.default.name con le sue opzioni da riga di comando.

Come è possibile ottenere il valore definito in fs.default.name in modo affidabile dalla riga di comando?

Il test sarà sempre in esecuzione su namenode, quindi il nome del computer è facile. Ma ottenere il numero di porta (8020) è un po 'difficile. Ho provato lsof, netstat .. ma non sono riuscito a trovare un modo affidabile.

risposta

30

Sotto il comando disponibile in Apache hadoop 2.7.0 in poi, questo può essere utilizzato per ottenere i valori per le proprietà di configurazione hadoop. fs.default.name è deprecato in hadoop 2.0, fs.defaultFS è il valore aggiornato. Non sono sicuro se questo funzionerà in caso di maprfs.

hdfs getconf -confKey fs.default.name 

Non è sicuro se ci sono delle utility a riga di comando disponibili per il recupero dei valori delle proprietà di configurazione in MAPR o Hadoop 0,20 versioni Hadoop. In questo caso è meglio provare lo stesso in Java per recuperare il valore corrispondente a una proprietà di configurazione.

Configuration hadoop conf = Configuration.getConf(); 
System.out.println(conf.get("fs.default.name")); 
+0

l'utilità della riga di comando "HDFS" non è disponibile nella versione Hadoop prima? – ernesto

+0

comando hdfs introdotto a hadoop da 2.X, questo comando non è presente in 1.X, puoi provare la seconda opzione in questo caso – sachin

+0

Usa hadoop conf -key fs.default.name per versioni 2.x pre. –

8

fs.default.name è deprecato.

uso: hdfs getconf -confKey fs.defaultFS

+0

Ottengo getconf: comando sconosciuto quando provo. –

1

ho incontrato questa risposta quando ero alla ricerca di HDFS URI. Generalmente si tratta di un URL che punta al namenode. Mentre hdfs getconf -confKey fs.defaultFS mi ottiene il nome del nameservice ma non mi aiuterà a costruire l'URI HDFS.

Ho provato il seguente comando per ottenere un elenco dei namenodes invece

hdfs getconf -namenodes 

Questo mi ha dato una lista di tutti i namenodes, primarie prima seguita da secondaria. Dopo di che la costruzione della HDFS URI era semplice

hdfs://<primarynamenode>/ 
+0

Ottengo getconf: comando sconosciuto quando lo provo. –

-1

Sì, HDFS getconf -namenodes mostrerà elenco di namenodes.

0

è possibile utilizzare

hdfs getconf -confKey fs.default.name