什么是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中的这些路径不需要与您在本地数据节点存储中使用的路径相关联(没有理由或优势这样做)。