天天看點

hdfs disk balancer 磁盤均衡器

作者:huan1993

1、背景

在我們的hadoop叢集運作一段過程中,由于多種原因,資料在DataNade的磁盤之間的分布可能是不均勻。比如: 我們剛剛給某個DataNode新增加了一塊磁盤或者叢集上存在大批量的write & deltete操作等燈。那麼有沒有一種工具,能夠使單個DataNode中的多個磁盤的資料均衡呢?借助Hadoop提供的Diskbalancer指令行工具可以實作。

2、hdfs balancer和 hdfs disk balancer有何不同?

hdfs balancer:是為了叢集中DataNode的資料均衡,即針對多個DataNode的。

hdfs disk balancer 磁盤均衡器

hdfs balancer

hdfs disk balancer:是為了使單台DataNode中的多個磁盤中的資料均衡。

hdfs disk balancer 磁盤均衡器

hdfs disk balancer

注意: 目前DiskBalancer不支援跨存儲媒體(SSD、DISK等)的資料轉移,是以磁盤的均衡都是要求在一個storageType下的。因為hdfs中存在異構存儲。

3、操作

3.1 生成計劃

[hadoopdeploy@hadoop01 ~]$ hdfs diskbalancer -plan hadoop01 -out hadoop01-plan.json           

-plan:後面接的是主機名。

-out:指定計劃檔案的輸出位置。

hdfs disk balancer 磁盤均衡器

生成計劃

3.2 執行計劃

[hadoopdeploy@hadoop01 ~]$ hdfs diskbalancer -execute hadoop01-plan.json           
hdfs disk balancer 磁盤均衡器

執行計劃

3.3 查詢計劃

[hadoopdeploy@hadoop01 ~]$ hdfs diskbalancer -query hadoop01           

-query 後面跟的是 主機名

hdfs disk balancer 磁盤均衡器

查詢計劃

3.4 取消計劃

[hadoopdeploy@hadoop01 ~]$ hdfs diskbalancer -cancel hadoop01-plan.json
           
hdfs disk balancer 磁盤均衡器

取消計劃

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 磁盤資料密度度量标準

hdfs disk balancer 磁盤均衡器

磁盤資料密度度量标準

上圖來自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