理论上HDFS中存储一个文件时会被分成多个Block,这些block应该会存放在不同的节点中。例如我们HDFS中有一个文件hdfs dfs -put flink-1.8.2-bin-scala_2.11.tgz /
这个文件被分成了三个Block,分别是Block0、Block1、Block2:
这三个Block的大小加起来总共就是283.81MB。
其中Block0的id为:1073741846、Block1的id为1073741847、Block2的id为1073741848。
我们在hadoop数据目录下查看(在hdfs-site.xml文件中配置hadoop.tmp.dir),在路径/home/duandingyang/tmp/hadoop-tmp/dfs/data/current/BP-840844130-127.0.1.1-1570955999745/current/finalized/subdir0/subdir0
下看到了这几个block:
当我们要get这个文件时,在NameNode中查找这个文件对应的元数据信息(文件被拆成了多少block,这些block的id是多少,存在哪个DataNode中等等)
如果我们如果把这三个文件手动合并会怎么样?
将这三个block文件添加到一个压缩文件:
cat blk_1073741846 >> ~/flink.tgz
cat blk_1073741847 >> ~/flink.tgz
cat blk_1073741848 >> ~/flink.tgz
然后可以使用tar -xvf ~/flink.tgz
命令可以解压这个文件,
说明HDFS只是帮我们做了个文件切分。