9

在遵循一些在线教程之后,我正在尝试在 Hadoop 中运行 WordCount 示例。但是,当我们执行以下命令时,我不清楚文件从我们的本地文件系统复制到 HDFS 的位置。

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

当我执行以下命令时,我没有在 HDFS 上看到我的 python-tutorial.pdf。

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 目录以及输入文件的位置?

4

1 回答 1

8

这是在dfs.datanode.data.dir属性中设置的,默认为file://${hadoop.tmp.dir}/dfs/data(请参阅此处的详细信息)。

但是,就您而言,问题在于您没有使用 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.

总结:数据节点使用的本地路径与您在 HDFS 中使用的路径不同。您可以进入本地目录查找文件,但您不应该这样做,因为您可能会弄乱 HDFS 元数据管理。只需使用 hadoop 命令行工具在 HDFS 中复制/移动/读取文件,使用您希望使用的任何逻辑路径(在 HDFS 中)。HDFS 中的这些路径不需要绑定到您用于本地数据节点存储的路径(没有理由或这样做的好处)。

于 2013-10-17T21:23:52.743 回答