什么是Hadoop上的HDFS位置?

Nit*_*tal 8 java hadoop

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

hadoop fs -copyFromLocal /host/tut/python-tutorial.pdf /usr/local/myhadoop-tmp/
Run Code Online (Sandbox Code Playgroud)

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

hadoop fs -ls
Run Code Online (Sandbox Code Playgroud)

这让我很困惑.我已经在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>
Run Code Online (Sandbox Code Playgroud)

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

cab*_*bad 7

这是在dfs.datanode.data.dir属性中设置的,默认为file://${hadoop.tmp.dir}/dfs/data(详见此处).

但是,在您的情况下,问题是您没有 HDFS中使用完整路径.相反,做:

hadoop fs -ls /usr/local/myhadoop-tmp/
Run Code Online (Sandbox Code Playgroud)

请注意,您似乎也将HDFS中的路径与本地文件系统中的路径混淆.在HDFS中,您的文件位于/usr/local/myhadoop-tmp/.在您的本地系统中(并给出您的配置设置),它在/usr/local/myhadoop-tmp/dfs/data/; 在那里,有一个由HDFS定义的目录结构和命名约定,它独立于您决定使用的HDFS中的任何路径.此外,它不会具有相同的名称,因为它被分成块,每个块被分配一个唯一的ID; 块的名称就像是blk_1073741826.

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