HDFS 單個節點使用了多塊硬碟如何balance?

HDFS中單個節點使用了多塊硬碟,即dfs.data.dir = /data1,/data2...類似這樣。現在發現data1這塊硬碟已經寫滿,而data2這塊硬碟才用了不到一半。而hadoop自帶的balancer功能也是在datanode指間做balance。有什麼辦法可以在同一個節點下的多個硬碟之間做balance。

網上搜到一些說法是先停掉datanode,然後手動mv數據塊目錄。但也有文章說,破壞data的目錄結構可能導致數據永久丟失。

不知道有沒有更安全和權威的辦法,請有姿勢的大牛給解釋一下,非常感謝!


謝邀,其實應該邀請Bingo Zhou | LinkedIn 這位來回答,但是不知道他用知乎不。

這個特性只有在最新的HDFS 3.0.0裡面才包含,叫diskbalancer,作用就是在單機內多磁碟間做數據平衡。如果是舊版本hdfs的話,那就只能流口水了(本人正在流口水)。

bingozhou參與了這個特性的開發,目前應該是就職於Hortonworks,專門搞hdfs開發的。

diskbalancer的具體使用方法可以參照cloudera的這篇文章:How-to: Use the New HDFS Intra-DataNode Disk Balancer in Apache Hadoop - Cloudera Engineering Blog

以及Hadoop官方文檔:HDFS Disk Balancer

大概用法是:

1 創建計劃

hdfs diskbalancer -plan http://lei-dn-3.example.org

2 查看計劃

hdfs dfs -ls /system/diskbalancer/2016-Aug-19-18-04-01

3 執行計劃

hdfs diskbalancer -execute /system/diskbalancer/2016-Aug-17-17-03-56/172.26.10.16.plan.json

如果是老版本的話,其實還是可以通過手工move的途徑操作的,先停掉需要balance的datanode,然後手工mv block數據到新的磁碟,注意保持目錄結構,然後啟動datanode。提醒:手搓有風險,一定要看準了再操作。

參考: FAQ - Hadoop Wiki


解決了嗎?hadoop2.x版本的也遇見了


推薦閱讀:

講座總結|解讀大數據世界中MapReduce的前世今生
Hadoop的MapReduce階段為什麼要進行排序呢,這樣的排序對後續操作有什麼好處么?
Hadoop完全分散式集群在Vmware上的部署
MapReduce Lab03 筆記
大數據那些事(5):沉沒的微軟以及Dryad

TAG:Hadoop | MapReduce | HDFS | 大數據 |