概述
HDFS 在 HDFS-7923 中,引入了 block report lease 這個新的特性,目標是避免集群中 DN 集中進行全量 block report,從而導致 NN 阻塞的情況,一般這種情況在 NN 剛啟動時比較多見。
按照這個 patch,目前 NN 最多允許6個 DN 同時做 FBR(Full Block Report),且 DN 最多有5分鐘的時間來完成這次 FBR。
問題
這個特性的出發(fā)點是好的,但是它做的完成度很低,存在很多問題。
-
功能問題
沒有考慮到許多臨界情況,導致在那些情況下,DN 無法完成 FBR,最終導致- NN 啟動之后,由于始終無法完成 block report,因此長時間無法退出安全模式 。
- 由于 DN block report 可能出現(xiàn)問題(例如:DN 上報不完整,12塊盤只能成功上報6塊,等等),可能導致 NN 上可能突然出現(xiàn)許多 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 頒發(fā)個數(shù)
默認值6,同樣如上所述,NN 同時最多頒發(fā)6個 lease,即最多同時允許6個 DN 進行 FBR,NN 在 DN 執(zhí)行心跳時頒發(fā) lease,按照現(xiàn)網(wǎng)配置,心跳間隔為 10s,也就是說,最壞的情況下,NN 在長達10s 左右的時間里只能處理6個 DN 的 FBR,在集群規(guī)模較大時(1000 DN+),這將嚴重拖慢 NN 啟動之后,退出 safeMode 的速度。
-
解決辦法
功能問題
先合入上面的兩個 patch,后面如果出現(xiàn)問題,繼續(xù)解決。-
性能問題
- 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 頒發(fā)個數(shù)增大10倍,配置為60
NameNode 側,hdfs-site.xml 中,做如下配置
<property> <name>dfs.namenode.max.full.block.report.leases</name> <value>60</value> </property> - Block Report Lease 過期時間拉長為半小時: