在学习了一些在线教程之后,我尝试在 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 目录以及输入文件的去向?
最佳答案
这是在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 中的任何路径。此外,它不会有相同的名称,因为它被分成 block ,每个 block 都分配有一个唯一的 ID; block 的名称类似于 blk_1073741826
。
总结:数据节点使用的本地路径与您在 HDFS 中使用的路径不同。您可以进入本地目录查找文件,但您不应该这样做,因为您可能会搞乱 HDFS 元数据管理。只需使用 hadoop 命令行工具在 HDFS 中复制/移动/读取文件,使用您希望使用的任何逻辑路径(在 HDFS 中)。 HDFS 中的这些路径不需要绑定(bind)到您用于本地数据节点存储的路径(没有理由也没有这样做的好处)。
关于java - Hadoop 上的 HDFS 位置是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19437550/