2015-01-30 11 views
11

Ich habe Hadoop 2.5.2 für einen 10-Knoten-Cluster installiert und konfiguriert. 1 fungiert als Masternode und andere Knoten als Slavenodes.hadoop fs -ls führt zu "keine solche Datei oder Verzeichnis"

Ich habe ein Problem bei der Ausführung von Hadoop fs-Befehlen. Der Befehl hadoop fs -ls funktioniert problemlos mit dem HDFS-URI. Es gibt Meldung "ls:` '. Keine solche Datei oder das Verzeichnis", wenn ohne HDFS URI

verwendet
[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]:~$ 

Während, den gleichen Befehl mit HDFS URI Ausführung

[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]:~$ 

I Ausnahme in MapReduce bin immer Programm aufgrund dieses Verhaltens. jarlib bezieht sich auf den Speicherort der HDFS-Datei, während ich möchte, dass jarlib auf die JAR-Dateien verweist, die im lokalen Dateisystem auf den Hadoop-Knoten gespeichert sind.

Antwort

34

Das Verhalten, das Ihnen erwartet wird sehen, lassen Sie mich erklären, was los ist, wenn Sie mit hadoop fs Befehlen arbeiten.

Die Syntax des Befehls ist dies: hadoop fs -ls [path]

standardmäßig, wenn Sie nicht angeben [path] für den obigen Befehl hadoop erweitert den Pfad zu /home/[username] in hdfs; Dabei wird [username] durch den Linux-Benutzernamen ersetzt, der den Befehl ausführt.

Also, wenn Sie diesen Befehl ausführen:

[email protected]:~$ hadoop fs -ls 

der Grund, warum Sie den Fehler sehen, ist ls: '.': No such file or directory weil hadoop ist für diesen Weg /home/ubuntu suchen, scheint es, wie dieser Pfad existiert nicht in hdfs.

Der Grund, warum dieser Befehl:

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

funktioniert, weil Sie explizit [path] angegeben haben, und ist die Wurzel der hdfs. Sie können auch das gleiche mit diesem tun:

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

, die an der Wurzel hdfs wird automatisch ausgewertet.

Hoffe, dies löscht das Verhalten, das Sie beim Ausführen von hadoop fs -ls Befehl sehen.

Wenn Sie also den lokalen Dateisystempfad angeben möchten, verwenden Sie file:/// URL-Schema.

1

Es gibt ein paar Dinge bei der Arbeit hier; basierend auf „jarlib an die HDFS Speicherort der Datei beziehen“, es klingt wie Sie in der Tat ein HDFS Pfad als fs.default.name gesetzt haben, die in der Tat die typische Einrichtung ist. Also, wenn Sie hadoop fs -ls eingeben, versucht dies tatsächlich in HDFS zu suchen, außer dass es in Ihrem current working directory aussieht, was so etwas wie hdfs://101-master:50000/user/ubuntu sein sollte. Die Fehlermeldung ist leider etwas verwirrend, da sie nicht besagt, dass . als der vollständige Pfad interpretiert wurde. Wenn Sie hadoop fs -mkdir /user/ubuntu dann hadoop fs -ls beginnen sollten zu arbeiten.

Dieses Problem hat nichts mit Ihrem "jarlib" -Problem zu tun; wenn Sie Dateien mögen explizit im lokalen Dateisystem gespeichert beziehen, aber wo der Weg führt durch Path Auflösung des Hadoop, müssen Sie einfach file:/// hinzuzufügen Hadoop zu zwingen, auf das lokale Dateisystem zu beziehen. Zum Beispiel:

hadoop fs -ls file:///tmp 

Versuchen Sie, Ihre JAR-Datei Pfade als fille vorbei file:///path/to/your/jarfile und sollte es funktionieren.

-1

WARN util.NativeCodeLoader: Kann nicht mutter hadoop Bibliothek für Ihre Plattform laden ... builtin-Java-Klassen, wo anwendbar

Dieser Fehler wird mit diesem Befehl in .bashrc entfernt werden:

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

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

Dies hat mit dem fehlenden Home-Verzeichnis für den Benutzer zu tun. Sobald ich das Home-Verzeichnis unter den hdfs für den angemeldeten Benutzer erstellt, es funktionierte wie ein Zauber ..

hdfs dfs -mkdir /user 

hdfs dfs -mkdir /user/{loggedin user} 

hdfs dfs -ls 

diese Methode mein Problem behoben.

0

Das Verzeichnis Benutzer in Hadoop ist (in HDFS)

/user/<your operational system user> 

Wenn Sie diese Fehlermeldung erhalten, kann es sein, weil Sie noch nicht Ihr Benutzerverzeichnis innerhalb HDFS erstellt.

Verwenden

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

Um zu sehen, was Ihre aktuelle Betriebssystembenutzer ist, zu verwenden:

id -un 

hadoop fs -ls sollte es anfangen zu arbeiten ...

Verwandte Themen