概述
HDFS 在 HDFS-7923 中,引入了 block report lease 这个新的特性,目标是避免集群中 DN 集中进行全量 block report,从而导致 NN 阻塞的情况,一般这种情况在 NN 刚启动时比较多见。
按照这个 patch,目前 NN 最多允许6个 DN 同时做 FBR(Full Block Report),且 DN 最多有5分钟的时间来完成这次 FBR。
问题
这个特性的出发点是好的,但是它做的完成度很低,存在很多问题。
-
功能问题
没有考虑到许多临界情况,导致在那些情况下,DN 无法完成 FBR,最终导致- NN 启动之后,由于始终无法完成 block report,因此长时间无法退出安全模式 。
- 由于 DN block report 可能出现问题(例如:DN 上报不完整,12块盘只能成功上报6块,等等),可能导致 NN 上可能突然出现许多 missing block
- 其它
这些问题,直到 DN 下次成功进行 FBR 后,才有可能恢复。 目前已知的 bug 有:
- HDFS-12914. Block report leases cause missing blocks until next report
- HDFS-14314. fullBlockReportLeaseId should be reset after registering to NN
-
性能问题
该特性引入了两个新的配置项,但是默认值都取的有问题:-
Block Report Lease 过期时间
默认值 5min,如上所述,这意味着一个拿到了 lease 的 DN 有5分钟来完成此次 FBR,这在一般情况下是够的,但是在一些特殊情况下(如 NN 刚启动时),这是不够的,此时会引起 lease expired 错误,进而导致 DN FBR 失败,如下图所示:
-
Block Report Lease 颁发个数
默认值6,同样如上所述,NN 同时最多颁发6个 lease,即最多同时允许6个 DN 进行 FBR,NN 在 DN 执行心跳时颁发 lease,按照现网配置,心跳间隔为 10s,也就是说,最坏的情况下,NN 在长达10s 左右的时间里只能处理6个 DN 的 FBR,在集群规模较大时(1000 DN+),这将严重拖慢 NN 启动之后,退出 safeMode 的速度。
-
解决办法
-
功能问题
先合入上面的两个 patch,后面如果出现问题,继续解决。 -
性能问题
- Block Report Lease 过期时间拉长为半小时:
NameNode 侧,hdfs-site.xml 中,做如下配置
<property> <name>dfs.namenode.full.block.report.lease.length.ms</name> <value>1800000</value> </property>
- Block Report Lease 颁发个数增大10倍,配置为60
NameNode 侧,hdfs-site.xml 中,做如下配置
<property> <name>dfs.namenode.max.full.block.report.leases</name> <value>60</value> </property>
- Block Report Lease 过期时间拉长为半小时:
网友评论