java - Hadoop 上的 HDFS 位置是什么?

标签 java hadoop

在学习了一些在线教程之后,我尝试在 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/

相关文章:

java - 从不同的类调用 TextToSpeech

java - 继承的方法不起作用

java - R 和 R.drawable 有什么区别?

java - 当多个map任务在同一个datanote上并行运行时,datanode内存使用的困惑

java - maven安装错误

hadoop - 水槽不使用 SocialAgent 获取 Facebook 数据

hadoop - 从 HDFS 加载数据不适用于 Elephantbird

java - Hibernate 4.1 错误 : Could not create DynamicParameterizedType for type: org. hibernate.type.EnumType

java - 如何将字符串转换为数组?

macos - 没有密码的本地 Hadoop 安装有多安全?