Hadoop中的文件实际存储在哪里?

2022年10月28日

本文出自明月工作室:https://www.freebytes.net/it/bigdata/hadoop-file-store.html

hdfs文件系统界面

当我们把文件上传到hadoop中,我们可以在页面上查看hdfs文件系统的信息。如下图,我在/input目录下上传了一个jdk文件,大概201M,但我的block-size设置成了64M,所以它会被切割成4个block,64M*3+9M=201M。

Hadoop中的文件实际存储在哪里?插图

但我们的副本数设置成3,也就是说每个block会有3个副本,一共是12个block。

那这12个block分别存储在哪里了呢?

点击jdk文件,可以看到更加具体的信息:

Hadoop中的文件实际存储在哪里?插图(1)

这里有几个关键信息,block0,block id,size,availablility,我先分别解释一下。

Hadoop中的文件实际存储在哪里?插图(2)

可以看到,这里一共有4个block,代表的是四个block以及他们的副本,即:

block0 = block0-0, block0-1 , block0-2
block1 = block1-0, block1-1 , block1-2

而每个block的size,都是67108864,也就是64M,但block3是9M。

一共有四个block id,分别对应block0、block1、block2、block3。

Availablility代表的是block所在的机器名。

如下图,我们记录一下block3的id,这个id是: 1073742324 ,大小是9M,分散存储在集群中的三个机器:hd-master,hd-slave1,hd-slave2。

Hadoop中的文件实际存储在哪里?插图(3)

然后,我们去机器上找一下这个block的具体存储位置。

hdfs文件的真实存储位置

先去hd-master上,看配置文件hdfs-site.yml中的数据配置:

<property>
    <name>dfs.datanode.data.dir</name>
      <value>/export/software/hadoop-3.3.4/data</value>
</property>    

由此得知,我们的数据是存储在/export/software/hadoop-3.3.4/data这个目录下的。然后cd命令进入这个目录,

cd /export/software/hadoop-3.3.4/data/current/BP-1700483297-127.0.1.1-1663298915277/current/finalized/subdir0/subdir1

这个目录,每个机器可能不一样,但是大同小异,自己多试试,用ls -l就能查看到文件了:

Hadoop中的文件实际存储在哪里?插图(4)

看这两个文件,blk_后面接的就是block3的id,一个是数据文件,一个是元数据文件,数据文件的大小刚好就是9M。

接着,把hd-slave1和hd-slave2的这个目录的文件也查看一下,都发现了这个文件,也就是刚好3个副本。

数据文件是可以用cat没命令输出到控制台的,不过只有文本格式的才能看懂,其他格式的会输出一堆乱码。