1、背景
在我們的hadoop叢集執行一段過程中,由於多種原因,資料在DataNade的磁碟之間的分佈可能是不均勻。比如: 我們剛剛給某個DataNode新增加了一塊磁碟或者叢集上存在大批次的write & deltete操作等燈。那麼有沒有一種工具,能夠使單個DataNode中的多個磁碟的資料均衡呢?藉助Hadoop提供的Diskbalancer
命令列工具可以實現。
2、hdfs balancer和 hdfs disk balancer有何不同?
hdfs balancer:
是為了叢集中DataNode的資料均衡,即針對多個DataNode的。
hdfs disk balancer:
是為了使單臺DataNode中的多個磁碟中的資料均衡。
注意:
目前DiskBalancer
不支援跨儲存介質(SSD
、DISK
等)的資料轉移,所以磁碟的均衡都是要求在一個storageType下的。因為hdfs中存在異構儲存
。
3、操作
3.1 生成計劃
[hadoopdeploy@hadoop01 ~]$ hdfs diskbalancer -plan hadoop01 -out hadoop01-plan.json
-plan:
後面接的是主機名。 -out:
指定計劃檔案的輸出位置。
3.2 執行計劃
[hadoopdeploy@hadoop01 ~]$ hdfs diskbalancer -execute hadoop01-plan.json
3.3 查詢計劃
[hadoopdeploy@hadoop01 ~]$ hdfs diskbalancer -query hadoop01
-query
後面跟的是 主機名
3.4 取消計劃
[hadoopdeploy@hadoop01 ~]$ hdfs diskbalancer -cancel hadoop01-plan.json
4、和disk balancer相關的配置
配置 | 描述 |
---|---|
dfs.disk.balancer.enabled | 此引數控制是否為叢集啟用diskbalancer。如果未啟用,任何執行命令都將被DataNode拒絕。預設值為true。 |
dfs.disk.balancer.max.disk.throughputInMBperSec | 這控制了diskbalancer在複製資料時消耗的最大磁碟頻寬。如果指定了10MB之類的值,則diskbalancer平均只會複製10MB/S。預設值為10MB/S。 |
dfs.disk.balancer.max.disk.errors | 設定能夠容忍的在指定的移動過程中出現的最大錯誤次數,超過此閾值則失敗。例如,如果一個計劃有3對磁碟要在其中複製,並且第一個磁碟集遇到超過5個錯誤,那麼我們放棄第一個副本並啟動計劃中的第二個副本。最大錯誤的預設值設定為5。 |
dfs.disk.balancer.block.tolerance.percent | 設定磁碟之間進行資料均衡操作時,各個磁碟的資料儲存量與理想狀態之間的差異閾值。取值範圍[1-100],預設為10。例如,各個磁碟的理想資料儲存量為100 GB,此引數設定為10。那麼,當目標磁碟的資料儲存量達到90 GB時,則認為該磁碟的儲存狀態就已經達到預期。 |
dfs.disk.balancer.plan.threshold.percent | 設定在磁碟資料均衡中可容忍的兩磁碟之間的資料密度域值差,取值範圍[1-100],預設為10。如果任意兩個磁碟資料密度差值的絕對值超過了閾值,則說明需要對該的磁碟進行資料均衡。例如,如果一個2盤節點上的總資料為100 GB,那麼磁碟均衡器計算每個磁碟上的期望值為50 GB。如果容差為10%,則單個磁碟上的資料需要大於60 GB(50 GB + 10%容差值),DiskBalancer才能開始工作。 |
dfs.disk.balancer.plan.valid.interval | 磁碟平衡器計劃有效的最大時間。支援以下字尾(不區分大小寫):ms(milis)、s(sec)、m(min)、h(h)、d(day)以指定時間(例如2s、2m、1h等)。如果未指定字尾,則假定為毫秒。預設值為1d |
5、額外知識點
5.1 新的block儲存到那個磁碟(卷)中
當資料寫入新的block時,DataNode會根據策略選擇不同的磁碟來儲存。
迴圈策略:
預設策略,將新的塊均勻的分佈在可用的磁碟上,可能造成資料傾斜。
可用空間策略:
選擇更多可用空間(按百分比)的磁碟。可能造成在某段時間內,某個磁碟的IO壓力變大。
5.2 磁碟資料密度度量標準
上圖來自 https://www.bilibili.com/video/BV11N411d7Zh/?p=81
6、參考文件
1、https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HDFSDiskbalancer.html
2、https://help.aliyun.com/document_detail/467585.html
3、https://www.bilibili.com/video/BV11N411d7Zh/?p=81