HDFS 默认对一个 block 有三个副本,第一个副本和第 2 、 3 副本存在在不同机架的服务器上,HDFS 是如何确定的呢?
HDFS 中的数据块分布是由数据节点管理器(Datanode Manager)和块复制步骤组成的。当一个块被创建时,块复制程序策略确定每个副本的位置。具体而言,副本分布是通过以下步骤实现的:
1.选择距离最远的机架来部署第一个复制副本,并复制该数据块。
2.选择另一个距离最远的机架来部署第二个复制副本,并复制数据块。
3.在同一机架中选择一个节点来部署第三个副本,并复制该数据块。
这种副本策略确保了数据块在磁盘损坏、节点故障或网络问题时的高可用性。它还能够增加 HDFS 集群的可扩展性和容错性,并有效地提高了数据读取和写入的速度。
首先我们定义一个小文件:
for i in `seq 100000`;do echo "hello world $i" >>test.txt;done
然后在上传的时候设定block的大小:
hdfs dfs -D dfs.blocksize=1048576 -put test.txt /user/root
我们去到“/var/software/hadoop/local/dfs/data/current/BP-269914864-192.168.16.111-1560277309858/current/finalized/subdir0/subdir0
”目录下查看:
[root@node1 subdir0]# ll
总用量 198256
-rw-r--r-- 1 root root 134217728 6月 12 16:52 blk_1073741825
-rw-r--r-- 1 root root 1048583 6月 12 16:52 blk_1073741825_1001.meta
-rw-r--r-- 1 root root 65417541 6月 12 16:52 blk_1073741826
-rw-r--r-- 1 root root 511083 6月 12 16:52 blk_1073741826_1002.meta
-rw-r--r-- 1 root root 1048576 6月 12 16:59 blk_1073741827
-rw-r--r-- 1 root root 8199 6月 12 16:59 blk_1073741827_1003.meta
-rw-r--r-- 1 root root 740319 6月 12 16:59 blk_1073741828
-rw-r--r-- 1 root root 5791 6月 12 16:59 blk_1073741828_1004.meta
每个块旁边都有一个记录了元数据信息的小文件描述它,最重要的就是做验证用的MD5值。
其它的诸如"hdfs dfs -ls",“hdfs dfs -cat”,“hdfs dfs -get” “-chmod” ,“-chown”等和Linux命令无异,举一反三,这里就过多赘述了。