随着hadoop集群数据量增大,以及机器的不断扩容,修改副本数量几乎是经常要做的事情了
1.配置dfs.replication
dfs.replication是client参数,修改后只有新加入的数据才会采用这个副本数量,这个就相当于一个通用的参数
hdfs-site.xml <property> <name>dfs.replication</name> <value>2</value> </property>
2.查看副本数量
#hdfs fsck /user
....Status: HEALTHY Total size:443004172861 B (Total open files size: 760229081 B) Total dirs:19362 Total files:133928 Total symlinks:0 (Files currently being written: 7) Total blocks (validated):132492 (avg. block size 3343629 B) (Total open file blocks (not validated): 11) Minimally replicated blocks:132492 (100.0 %) Over-replicated blocks:0 (0.0 %) Under-replicated blocks:79262 (59.82399 %) Mis-replicated blocks:0 (0.0 %) Default replication factor:1 Average block replication:1.4017601 Corrupt blocks:0 Missing replicas:79262 (29.911995 %) Number of data-nodes:5 Number of racks:1 FSCK ended at Thu Aug 15 15:34:42 CST 2019 in 33910 milliseconds
可以看出 Average block replication 为 1.4,这是你指定目录下平均的副本数,因为不同的文件可能会有不同的副本数
3.手动修改在线副本数
不同目录重要程度不一样,可能会需要分别调整副本数量,修改dfs.replication后要生效,也需要手动调整副本数
调整副本数的命令:
hdfs dfs -setrep -R -w 3 /user/
命令执行完需要很长时间,就算执行完也不一定 副本数全部就改了,只是标记了目标副本数
通过hdfs fsck /user可以查看该目录实时的副本数,可能你每次查看都回发现Average block replication正在增加或减少。这是因为后台正在根据标记的副本数物理的增减文件。
另外:上传文件的时候也可以指定副本数量 Hadoop dfs -D dfs.replication=1 -put 70M logs/2