2013-10-17 19 views
7

Sto cercando di eseguire l'esempio WordCount in Hadoop dopo aver seguito alcuni tutorial online. Tuttavia, non mi è chiaro da dove viene copiato il file dal nostro file system locale su HDFS quando eseguiamo il seguente comando.Qual è la posizione HDFS su Hadoop?

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

Quando ho eseguito il seguente comando, non vedo il mio python-Tutorial.Pdf elencati qui su HDFS.

hadoop fs -ls 

Questo mi confonde. Ho già specificato la directory "myhadoop-tmp" in core-site.xml. Ho pensato che questa directory diventasse la directory HDFS per la memorizzazione di tutti i file di input.

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

Se questo non è il caso in cui l'HDFS si trova sulla mia macchina? Quale configurazione determina la directory HDFS e dove va il file di input quando lo copia dal file system locale su HDFS?

+0

Hai provato 'hadoop fs -ls/usr/local/myhadoop-tmp /'? – cabad

+0

Freddo. Questo ha funzionato per me. Posso vedere il mio file ora. Grazie per la guida. – user2325154

+0

Bene, la mia risposta risponde alla tua domanda, quindi dovresti accettarla. – cabad

risposta

6

questo è impostato nella proprietà dfs.datanode.data.dir, che per default è file://${hadoop.tmp.dir}/dfs/data (vedi dettagli here).

Tuttavia, nel tuo caso, il problema è che non stai utilizzando il percorso completo all'interno di HDFS. Invece, fai:

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

Si noti che, ti sembra anche essere confondere il percorso all'interno HDFS al percorso nel file system locale. All'interno di HDFS, il tuo file è /usr/local/myhadoop-tmp/. Nel tuo sistema locale (e date le impostazioni di configurazione), è sotto /usr/local/myhadoop-tmp/dfs/data/; lì, c'è una struttura di directory e una convenzione di denominazione definita da HDFS, che è indipendente da qualunque percorso in HDFS decidi di usare. Inoltre, non avrà lo stesso nome, poiché è diviso in blocchi e ad ogni blocco è assegnato un ID univoco; il nome di un blocco è qualcosa come blk_1073741826.

Per concludere: il percorso locale utilizzato dal datanode NON è uguale ai percorsi che si utilizzano in HDFS. Puoi andare nella tua directory locale alla ricerca di file, ma non dovresti farlo, dato che potresti rovinare la gestione dei metadati HDFS. Basta usare gli strumenti da riga di comando di hadoop per copiare/spostare/leggere i file all'interno di HDFS, utilizzando qualsiasi percorso logico (in HDFS) che si desidera utilizzare. Questi percorsi all'interno di HDFS non hanno bisogno di essere legati ai percorsi utilizzati per la memorizzazione del datanode locale (non vi è alcun motivo o vantaggio per farlo).

+0

Ora posso vedere il file, tuttavia è stato memorizzato direttamente nella directory/usr/local/myhadoop-tmp e non in/usr/local/myhadoop-tmp/dfs/data. Non capisco perché però. Questo è quello che vedo: -rw-r - r-- 1 supergruppo chandeln 9322974 2013-10-17 17:06 /usr/local/myhadoop-tmp/python-tutorial.pdf – user2325154

+0

Questo significa che non riesco a vedere il file sul mio file system locale se vado in/usr/local/myhadoop-tmp/dfs/data/directory ed eseguo un comando ls -l? – user2325154

+0

@ user2325154 Ho aggiunto una spiegazione più dettagliata. – cabad

Problemi correlati