hadoop-2.8.5
1 写文件时遇到的问题
1.1 出现大量Under-Replicated Blocks
-
问题场景:写入1000w 4kB大小的文件时,出现大量Under-Replicated的block(默认3副本,大量2副本)。经排查,网络、内存、io和cpu都不是瓶颈。
-
原因:最后定位出和代码中判断DN是否负载过大的逻辑有关。
配置项"dfs.namenode.replication.considerLoad"默认为true,代表需要考虑DN的负载情况。NN首先根据放置策略选择放置副本的DN,每选出一个DN,都要通过BlockPlacementPolicyDefault.isGoodDatanode()方法判断选出的DN是否合适,在该方法中会对DN的负载情况进行考察,若当前DN的DataXceiver对象数量大于平均值的2倍,则认为该DN负载过大,舍弃该DN。
-
解决办法:修改hdfs-site.xml文件中的配置项,重启namenode使之生效。修改的配置项如下:
<!--不考虑DN的负载情况-->
<property>
<name>dfs.namenode.replication.considerLoad</name>
<value>false</value>
</property>
- 备注:发现源码的一个小问题:isGoodDatanode()方法会将D