2015-01-30 14 views
11

Ho installato e configurato Hadoop 2.5.2 per un cluster a 10 nodi. 1 agisce come masternode e altri nodi come slavenodes.hadoop fs -ls restituisce "nessun file o directory"

Ho un problema nell'esecuzione dei comandi hadoop fs. Il comando hadoop fs -ls funziona perfettamente con l'URI HDFS. Dà messaggio "ls:` ':. Nessun file o directory" quando viene utilizzato senza HDFS URI

[email protected]:~$ hadoop fs -ls 
15/01/30 17:03:49 WARN util.NativeCodeLoader: Unable to load native-hadoop 
ibrary for your platform... using builtin-java classes where applicable 
ls: `.': No such file or directory 
[email protected]:~$ 

considerando che, eseguendo lo stesso comando con HDFS URI

[email protected]:~$ hadoop fs -ls hdfs://101-master:50000/ 
15/01/30 17:14:31 WARN util.NativeCodeLoader: Unable to load native-hadoop  
library for your platform... using builtin-java classes where applicable 
Found 3 items 
drwxr-xr-x - ubuntu supergroup   0 2015-01-28 12:07 hdfs://101-master:50000/hvision-data 
-rw-r--r-- 2 ubuntu supergroup 15512587 2015-01-28 11:50 hdfs://101-master:50000/testimage.seq 
drwxr-xr-x - ubuntu supergroup   0 2015-01-30 17:03 hdfs://101-master:50000/wrodcount-in 
[email protected]:~$ 

io sono sempre un'eccezione a MapReduce programma a causa di questo comportamento. jarlib si riferisce al percorso del file HDFS, mentre, voglio che jarlib faccia riferimento ai file jar memorizzati nel file system locale sui nodi Hadoop.

risposta

34

Il comportamento che si sta vedendo è previsto, lasciatemi spiegare cosa sta succedendo quando si lavora con i comandi hadoop fs.

la sintassi del comando è questo: hadoop fs -ls [path]

Per impostazione predefinita, quando non si specifica [path] per il comando di cui sopra, Hadoop espande il percorso /home/[username] in HDFS; dove [username] viene sostituito con il nome utente linux che sta eseguendo il comando.

Così, quando si esegue questo comando:

[email protected]:~$ hadoop fs -ls 

il motivo che state vedendo l'errore è ls: '.': No such file or directory perché Hadoop è alla ricerca di questo percorso /home/ubuntu, sembra che questo percorso non esiste in HDFS.

Il motivo per cui questo comando:

[email protected]:~$ hadoop fs -ls hdfs://101-master:50000/ 

funziona perché, è stato espressamente specificato [path] ed è la radice delle HDFS. Puoi anche fare lo stesso usando questo:

[email protected]:~$ hadoop fs -ls/

che viene automaticamente valutato alla radice di hdf.

Spero, questo cancella il comportamento visualizzato durante l'esecuzione del comando hadoop fs -ls.

Quindi, se si desidera specificare il percorso del file system locale, utilizzare lo schema URL file:///.

1

Ci sono un paio di cose al lavoro qui; basato su "jarlib si riferisce alla posizione del file HDFS", sembra che tu abbia effettivamente un percorso HDFS impostato come il tuo fs.default.name, che è in effetti l'impostazione tipica. Quindi, quando digiti hadoop fs -ls, questo è in effetti cercando di guardare all'interno di HDFS, tranne che sta cercando nel tuo current working directory, che dovrebbe essere qualcosa come hdfs://101-master:50000/user/ubuntu. Il messaggio di errore è sfortunatamente un po 'confuso poiché non ti dice che . è stato interpretato come percorso completo. Se si hadoop fs -mkdir /user/ubuntu quindi hadoop fs -ls dovrebbe iniziare a lavorare.

Questo problema non è correlato al problema "jarlib"; ogni volta che si desidera fare riferimento a file archiviati in modo esplicito nel filesystem locale, ma dove il percorso attraversa la risoluzione Path di Hadoop, è sufficiente aggiungere file:/// per forzare Hadoop a fare riferimento al filesystem locale. Per esempio:

hadoop fs -ls file:///tmp 

Prova a passare i vostri percorsi di file jar come fille file:///path/to/your/jarfile e dovrebbe funzionare.

-1

WARN util.NativeCodeLoader: Impossibile caricare la libreria nativa Hadoop per la piattaforma ... utilizzando le classi builtin-java dove applicabile

Questo errore verrà rimosso utilizzando questo comando in file .bashrc:

export HADOOP_OPTS="$HADOOP_OPTS -Djava.library.path=/usr/local/hadoop/lib/native" 

------------------------------------------------------ 
/usr/local/hadoop is location where hadoop is install 
------------------------------------------------------- 
7

questo ha a che fare con la directory home mancante per l'utente. Una volta ho creato la home directory sotto gli HDFS per l'utente connesso, ha funzionato come un fascino ..

hdfs dfs -mkdir /user 

hdfs dfs -mkdir /user/{loggedin user} 

hdfs dfs -ls 

questo metodo risolto il mio problema.

0

La directory utente in Hadoop è (in HDFS)

/user/<your operational system user> 

Se si ottiene questo messaggio di errore può essere perché non avete ancora creato la directory utente all'interno di HDFS.

Usa

hadoop fs -mkdir -p /user/<current o.p. user directory> 

Per vedere qual è il tuo attuale utente del sistema operativo, l'uso:

id -un 

hadoop fs -ls dovrebbe iniziare a lavorare ...