2013-10-17 8 views
7

Ich versuche, das WordCount-Beispiel in Hadoop auszuführen, nachdem ich einige Online-Lernprogramme verfolgt habe. Was mir jedoch nicht klar ist, ist, wo die Datei von unserem lokalen Dateisystem in HDFS kopiert wird, wenn wir den folgenden Befehl ausführen.Wie ist der HDFS-Speicherort auf Hadoop?

hadoop fs -copyFromLocal /host/tut/python-tutorial.pdf /usr/local/myhadoop-tmp/ 

Wenn ich den folgenden Befehl ausgeführt habe, sehe ich meine Python-tutorial.pdf nicht hier auf HDFS aufgeführt.

hadoop fs -ls 

Das verwirrt mich. Ich habe bereits das Verzeichnis "myhadoop-tmp" in core-site.xml angegeben. Ich dachte, dass dieses Verzeichnis HDFS-Verzeichnis zum Speichern aller Eingabedateien wird.

core-site.xml 
============= 
<property> 
    <name>hadoop.tmp.dir</name> 
    <value>/usr/local/myhadoop-tmp</value> 
    <description>A base for other temporary directories.</description> 
</property> 

Wenn dies nicht der Fall ist, wo ist das HDFS auf meiner Maschine? Welche Konfiguration bestimmt das HDFS-Verzeichnis und wohin geht die Eingabedatei, wenn wir sie vom lokalen Dateisystem nach HDFS kopieren?

+0

Haben Sie 'hadoop fs -ls/usr/local/myhadoop-tmp /' versucht? – cabad

+0

Kühl. Das hat für mich funktioniert. Ich kann meine Datei jetzt sehen. Danke für die Anleitung. – user2325154

+0

Nun, meine Antwort beantwortet Ihre Frage, also sollten Sie es akzeptieren. – cabad

Antwort

6

Dies wird in der Eigenschaft dfs.datanode.data.dir festgelegt, die standardmäßig file://${hadoop.tmp.dir}/dfs/data lautet (siehe Details here).

In Ihrem Fall ist das Problem jedoch, dass Sie nicht den vollständigen Pfad innerhalb HDFS verwenden. Stattdessen tun:

hadoop fs -ls /usr/local/myhadoop-tmp/ 

Beachten Sie, dass Sie scheinen auch in Ihrem lokalen Dateisystem den Pfad innerhalb HDFS auf den Weg verwirrend zu sein. In HDFS befindet sich Ihre Datei in /usr/local/myhadoop-tmp/. In Ihrem lokalen System (und Ihrer Konfigurationseinstellung) ist es unter /usr/local/myhadoop-tmp/dfs/data/; Dort gibt es eine Verzeichnisstruktur und eine Namenskonvention, die von HDFS definiert werden und unabhängig von dem Pfad in HDFS sind, den Sie verwenden möchten. Außerdem wird es nicht den gleichen Namen haben, da es in Blöcke unterteilt ist und jedem Block eine eindeutige ID zugewiesen ist; Der Name eines Blocks ist etwas wie blk_1073741826.

Zusammenfassend: Der vom Datanode verwendete lokale Pfad ist NICHT identisch mit den Pfaden, die Sie in HDFS verwenden. Sie können in Ihr lokales Verzeichnis nach Dateien suchen, aber Sie sollten dies nicht tun, da Sie die HDFS-Metadatenverwaltung durcheinander bringen könnten. Verwenden Sie einfach die hadoop-Befehlszeilentools zum Kopieren/Verschieben/Lesen von Dateien in HDFS unter Verwendung eines beliebigen logischen Pfads (in HDFS), den Sie verwenden möchten. Diese Pfade innerhalb von HDFS müssen nicht mit den Pfaden verknüpft sein, die Sie für Ihren lokalen Datenknotenspeicher verwendet haben (es gibt keinen Grund oder Vorteil, dies zu tun).

+0

Ich kann die Datei jetzt sehen, aber sie wurde direkt unter meinem Verzeichnis/usr/local/myhadoop-tmp gespeichert und nicht unter/usr/local/myhadoop-tmp/dfs/data. Ich verstehe jedoch nicht warum. Das sehe ich: -rw-r - r-- 1 chandeln supergroup 9322974 2013-10-17 17:06 /usr/local/myhadoop-tmp/python-tutorial.pdf – user2325154

+0

Also heißt das, dass ich nicht sehen kann die Datei in meinem lokalen Dateisystem, wenn ich in das Verzeichnis/usr/local/myhadoop-tmp/dfs/data/gehe und einen Befehl ls -l ausführe? – user2325154

+0

@ user2325154 Ich habe eine detailliertere Erklärung hinzugefügt. – cabad