什么是Hadoop上的HDFS位置?

我正在尝试在遵循一些在线教程后在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 =============  hadoop.tmp.dir /usr/local/myhadoop-tmp A base for other temporary directories.  

如果不是HDFS位于我的机器上的情况? 什么配置决定HDFS目录以及输入文件从本地文件系统复制到HDFS时的位置?

这在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

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