理论上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只是帮我们做了个文件切分。
本文深入探讨了HDFS如何将文件切分为多个Block进行分布式存储,并通过实例演示了Block的存储位置及如何通过手动合并Block来还原文件,揭示了HDFS的文件切分原理。
1万+

被折叠的 条评论
为什么被折叠?



