前提:
CDH5.16.2
由於數據量過多,磁盤大小太小,導致磁盤使用率高達90%以上,於是新增磁盤,可問題來了,如何將這兩塊磁盤上的數據進行均衡呢?
本次基於CDH來做
1.設置dfs.disk.balancer.enabled 為true
2.生成平衡計划(cbp9.chinaoly.com為主機名)
hdfs diskbalancer -plan cbp9.chinaoly.com(需要均衡的機器) 會生成一個*.plan.json的文件
3.執行平衡計划
hdfs diskbalancer -execute /system/diskbalancer/2021-Feb-2-20-11-14/cbp9.chinaoly.com.plan.json
4.查看執行狀態
hdfs diskbalancer -query cbp9.chinaoly.com
DONE的時候表示已經執行完畢
備注:
此過程由於數據量相對比較大,磁盤IO、網絡IO占用都會比較高,雖然有參數可以配置,如dfs.datanode.balance.bandwidthPerSec,但仍然建議在集群負載不高時進行,特別是生產集群。另外執行時間的長度取決於:數據量、網絡IO、磁盤IO及新寫入的數據量大小
可同時配置dfs.datanode.fsdataset.volume.choosing.policy(磁盤的選擇策略)
Execute階段:
所有執行計划生成以后,就到了執行階段。這些計划會被提交到各自DataNode上,然后在DiskBalancer類中執行。然后DiskBalancer有專門的類DiskBalancerMover來做數據平衡工作。在磁盤間數據平衡的過程中,高使用率的磁盤會移動數據塊到相對低使用率的磁盤,等到滿足一定閾值關系的情況下時,DiskBalancer會漸漸地退出.在DiskBalancer的執行階段,有以下幾點需要注意:
帶寬限制:DiskBalancer也可以支持帶寬限制。默認是10M,可以通
過配置項dfs.disk.balancer.max.disk.throughputInMBperSec進行控制
失敗次數限制:DiskBalancer中會存在失敗次數的控制.在拷貝block數據塊的時候,出現IOException異常,會進行失敗次數的累加計數,如果超出最大容忍值,DiskBalancer也會退出.
數據平衡閥值控制:DiskBalancer中可以提供一個磁盤間數據的平衡閾值,以此作為是否需要繼續平衡數據的標准,配置項為dfs.disk.balancer.block.tolerance.percent.