2013-10-17 40 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