众所周知,hdfs的默认副本数量是3个,配置在/etc/hadoop/conf/hdfs-site.xml中
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
我们也可以通过hdfs dfs -ls /path/to/file 命令查看hdfs上的文件:
文件类型会在第二列显示副本数量3,第五列显示文件大小,目录因为是由namenode维护的,所以没有副本数量,显示为-
如果想修改全局副本数量,只需要修改上面的hdfs-site.xml中的配置然后重启hdfs即可,修改完成后:
1. 若hdfs中副本数量没有达到配置的数量则会自动进行备份,此时datanode节点之间会大量复制文件,集群性能会暂时受到影响。
2. 若hdfs中副本数量多于配置的数量,比如原来是3,修改为2,则已存在的副本不会被删除,只会对后续新增的文件使用新的配置。如果希望修改配置后,原有多出来的副本释放空间则可以执行balancer命令,后面会详细介绍。
当然也可以指定文件/目录设置副本数量,执行下面的命令:
hdfs dfs -setrep -w 5 [-R] /path/to/file
其中5就是修改后的备份数量,-R为可选项若后面的参数为目录则子文件夹全部都按此策略备份。
还有一个HDFS的命令可以查看目录下的数据块详细比例以及副本数量分布,我这里使用的是hadoop3版本,所以会多个擦除码(Erasure Coded)这一栏:
hdfs fsck /tmp