Hadoop datanode節點退役遇到的坑

問題描述:

當前集羣7臺機器,需要退役掉其中的3臺,退役了一天,發現block數不變,於是查看namenode日誌,發現以下信息:

2019-10-17 17:29:25,177 WARN org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicy: Failed to place enough replicas, still in need of 2 to reach 3 (unavailableStorages=[], storagePolicy=BlockStoragePolicy{HOT:7, storageTypes=[DISK], creationFallbacks=[], replicationFallbacks=[ARCHIVE]}, newBlock=true) For more information, please enable DEBUG log level on org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicy
2019-10-17 17:29:25,177 WARN org.apache.hadoop.hdfs.protocol.BlockStoragePolicy: Failed to place enough replicas: expected size is 2 but only 0 storage types can be selected (replication=3, selected=[], unavailable=[DISK], removed=[DISK, DISK], policy=BlockStoragePolicy{HOT:7, storageTypes=[DISK], creationFallbacks=[], replicationFallbacks=[ARCHIVE]})

遷移數據的時候,namenode會判斷各個datanode的負載是否超出平均負載,如果超出平均負載,則認爲這臺datanode不可用,繼續按照此算法重新找下一個datanode節點。

這裏的負載不是系統負載,而是xceiver線程數(這個線程好像是負責讀寫的),用總的xceiver線程數除以所有datanode數,算出平均負載。

本次遇到的是3臺機器正在退役,正在退役的機器datanode負載很低,導致剩下的4臺機器線程數超過平均值的兩倍,所以複製block的時候找不到正常的節點。

解決方法:

調整hdfs-site.xml的以下參數,並重啓Namenode解決,此參數用來關閉負載的判斷。

  <property>
        <name>dfs.namenode.replication.considerLoad</name>
        <value>false</value>
    </property>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章