2013-10-17 35 views
7

我想在遵循一些在線教程後在Hadoop中運行WordCount示例。然而,當我執行下面的命令時,文件從我們的本地文件系統複製到HDFS的位置並不清楚。什麼是Hadoop上的HDFS位置?

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

當我執行下面的命令時,我沒有看到我的python-tutorial.pdf在HDFS上列出。

hadoop fs -ls 

這讓我很困惑。我已經在core-site.xml中指定了「myhadoop-tmp」目錄。我認爲這個目錄將成爲存儲所有輸入文件的HDFS目錄。

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

如果情況並非HDFS位於我的機器上?什麼配置決定了HDFS目錄,當我們將它從本地文件系統複製到HDFS時,輸入文件的位置在哪裏?

+0

你試過'hadoop fs -ls/usr/local/myhadoop-tmp /'嗎? – cabad

+0

很酷。這對我有效。我現在可以看到我的文件。感謝您的指導。 – user2325154

+0

好吧,我的回答回答你的問題,所以你應該接受它。 – cabad

回答

6

這設置在dfs.datanode.data.dir屬性中,默認爲file://${hadoop.tmp.dir}/dfs/data(詳見here)。

但是,在你的情況下,問題是你沒有使用 HDFS中的完整路徑。相反,這樣做:

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

需要注意的是,你似乎也被混淆的路徑內HDFS的路徑在您的本地文件系統。在HDFS中,您的文件位於/usr/local/myhadoop-tmp/。在你的本地系統中(並給出你的配置設置),它在/usr/local/myhadoop-tmp/dfs/data/;在那裏,HDFS定義了一個目錄結構和命名約定,它獨立於您決定使用的HDFS中的任何路徑。此外,它不會有相同的名稱,因爲它被分成塊,每個塊被分配一個唯一的ID;塊的名稱就像blk_1073741826

總結:datanode使用的本地路徑與您在HDFS中使用的路徑不同。您可以進入本地目錄查找文件,但不應該這樣做,因爲您可能會搞亂HDFS元數據管理。只需使用hadoop命令行工具在HDFS中複製/移動/讀取文件,即可使用您希望使用的任何邏輯路徑(在HDFS中)。 HDFS中的這些路徑不需要綁定到您用於本地datanode存儲的路徑(沒有理由或有這樣做的優勢)。

+0

我現在可以看到該文件,但它直接存儲在我的/ usr/local/myhadoop-tmp目錄下,而不在/ usr/local/myhadoop-tmp/dfs/data下。我不明白爲什麼。這就是我所看到的:-rw-r - r-- 1 chandeln supergroup 9322974 2013-10-17 17:06 /usr/local/myhadoop-tmp/python-tutorial.pdf – user2325154

+0

那麼這是否意味着我看不見如果我進入/ usr/local/myhadoop-tmp/dfs/data /目錄並執行ls -l命令,那麼該文件位於本地文件系統中? – user2325154

+0

@ user2325154我添加了更詳細的解釋。 – cabad