關於Hadoop HDFS資料均衡。

anickname發表於2016-03-03

   在hadoop叢集中,當有新節點增加或者刪除原有節點時,如果不啟用資料均衡服務(負載均衡),則會造成資料在叢集中分佈不均勻。由此而帶來的問題是無法有效的利用MR本地化計算的優勢,通俗來說就是A節點上執行的map任務所需資料不在A節點上,在B節點上。這就避免不了跨節點進行資料讀取,造成了網路頻寬的不必要消耗。為了解決這樣的問題,引入資料均衡機制,也就是使用該服務達到叢集中資料的均勻分佈的目的。但是在達到該目的的過程中,需要遵循如下原則而不至於給原有叢集帶來不必要的麻煩:

1.原有資料塊不會減少

2.可隨時終止該服務

3.資料移動不能佔用過多的資源

4.不能夠影響namenode的工作


均衡負載原理圖:


大致過程為:

1.資料均衡服務要求namenode根據叢集中datanode的資料分佈做彙總。

2.根據該彙總情況形成資料塊遷移路線圖。

3.開始資料塊遷移任務

4.遷移完成,通知namenode刪除原有資料塊。

實際應用中可能需要每天定時做一次資料均衡,在crontab中定時執行start-balancer.sh命令,當然還可以隨時終止stop-balancer.sh.

start-balancer.sh中可使用引數 -t 如start-balancer.sh -t 5%,預設10%。該引數的意思是叢集中各節點的hdfs磁碟使用率和叢集中總的hdfs磁碟使用率的差值都應該小於該引數值,就達到了資料均衡,越小表明叢集中的資料越均衡。在資料庫遷移的過程中,還可以設定其移動的速度在hdfs-site.xml中設定(需重啟hdfs服務)

<property>
<name>dfs.balance.bandwidthPerSec</name>
<value>1048576</value> =>1M/s
</property></span>

該值越大意味著資料均衡完成的速度越快,但要同時考慮到MR的任務執行不會受到影響,在實際應用中由於對檔案不斷的進行讀寫操作,可能無法達到設定的閥值。另一方儘量保持叢集中各個節點的磁碟容量一致。

參考文章:http://www.ibm.com/developerworks/cn/data/library/bd-1506-hdfsdatabalance/index.html

                http://www.aboutyun.com/thread-7354-1-1.html


相關文章