大數據節點是啥意思,HDFS數據平衡:節點間平衡與節點內平衡

 2023-11-16 阅读 16 评论 0

摘要:HDFS數據平衡:節點間平衡與節點內平衡 HDFS容易發生數據不平衡的問題。 這其中包括各個DataNode之間存儲的數據量差異,以及一個DataNode內部各磁盤之間存儲的數據量差異。 HDFS專門提供了對應的機制來解決。 節點間平衡:Balancer CDH在HDFS中提供了Balan

HDFS數據平衡:節點間平衡與節點內平衡

HDFS容易發生數據不平衡的問題。
這其中包括各個DataNode之間存儲的數據量差異,以及一個DataNode內部各磁盤之間存儲的數據量差異。
HDFS專門提供了對應的機制來解決。

節點間平衡:Balancer

CDH在HDFS中提供了Balancer角色,使我們可以免于用命令行執行start-balancer.sh來手動配置。Cloudera Manager里與Balancer有關的配置項有以下這些。

Balancing Threshold:
Balancer平衡的閾值。平衡過程結束后,所有節點的磁盤占用率與集群的平均占用率之差必須小于threshold(按百分比計)。默認值是10,我們設成了5。

大數據節點是啥意思、Rebalancing Policy:
計算平衡度的策略,有DataNode和BlockPool兩種。前者是按節點級別來算,后者是按塊池級別來算。后者只有對HDFS Federation才有效,所以我們選前者。

Included/Excluded Hosts:
分別用來指定參與平衡的節點和被排除的節點。這樣可以先人為判斷數據分布情況,然后只讓我們認為需要平衡的節點來操作。

dfs.balancer.moverThreads/dispatcherThreads:
分別表示移動數據的線程池大小,和調度數據移動方案的線程池大小,默認值1000和200。

dfs.datanode.balance.max.concurrent.moves:
表示能夠同時移動的塊(英文說法叫in-flight)數量,默認值50。

什么叫非平衡數據。dfs.balancer.max-size-to-move:
表示在Balancer的一次迭代(下面會提到)中,一個DataNode的最大數據交換量,默認值10G。
另外,還有一個出現在DataNode參數但又與平衡相關的:dfs.datanode.balance.bandwidthPerSec,
即每個節點可以用來做平衡的最大帶寬,默認1MB/s。這個值在多數情況下是偏小的,可以適當增大,如10甚至20。千萬注意不能擠占太多帶寬,以保證正常業務的運行。

CDH Balancer的用法很簡單,只需要設定好上述參數,再點擊Actions→Rebalance菜單項,就會自動開始平衡了。
如果之前有運行,需要先中止掉,如果起不來,需要kill 掉
在這里插入圖片描述

那么Balancer內部是如何執行的呢?Balancer類的源碼位于org.apache.hadoop.hdfs.server.balancer包中,限于篇幅,就不貼出來了,只簡單敘述一下。
Balancer是迭代執行的,也就是說每次平衡都只移動一定量的數據,然后檢查集群是否符合平衡的標準。迭代的大致步驟是:

根據平衡度策略,計算出集群使用量均值,并與平衡閾值作比較,將節點按使用量從高到低劃分為4類。
根據劃分的4類節點,確認出需要平衡的源節點與目標節點對,并計算每對節點之間的數據交換量。
構造Dispatcher(這是與Balancer在同一個包中的類),初始化mover和dispatcher線程池。mover用來移動塊,dispatcher用來調度節點對。
對每個節點上的塊,確認它是否可以成為一個好的候選塊。如果可以,那么它就會被移動到目標節點上去。
從宏觀上看,就是這張圖。
在這里插入圖片描述

節點內平衡:DiskBalancer

HDFS數據存儲。如果想要解決節點內多塊磁盤數據不均衡的現象,就要借助DiskBalancer。
在CDH 5.8.2+版本中,可以通過在CM中配置進行開啟。如果使用的Hadoop版本是3.0+,就直接在hdfs-site.xml中加入相關項。
在HDFS配置項中找到“DataNode Advanced Configuration Snippet (Safety Valve) for hdfs-site.xml”,中文為“hdfs-site.xml的HDFS服務?級配置代碼段(安全閥)”,加入:

<property><name>dfs.disk.balancer.enabled</name><value>true</value>
</property>
<property><name>dfs.disk.balancer.max.disk.throughputInMBperSec</name><value>50</value>
</property>
<property><name>dfs.disk.balancer.plan.threshold.percent</name><value>2</value>
</property>
<property><name>dfs.disk.balancer.block.tolerance.percent</name><value>5</value>
</property>

dfs.disk.balancer.max.disk.throughputInMBperSec:指定磁盤間平衡時占用的最大磁盤帶寬,默認值10MB/s。在不影響讀寫性能的情況下可以適當調大。

dfs.disk.balancer.plan.threshold.percent:各盤之間數據平衡的閾值。DiskBalancer中采用一種叫volume data density(卷數據密度)的度量來確定占用率的偏差值,該值越大,表明磁盤間的數據越不均衡。平衡過程結束后,每個盤的卷數據密度與平均密度之差必須小于threshold(按百分比計)。默認值是10,我們設成了5。

dfs.disk.balancer.block.tolerance.percent:在每次移動塊的過程中,移動塊的數量與理想平衡狀態之間的偏差容忍值(按百分比計)。一般也設成5。

hdfs balancer?DiskBalancer的運行流程與Balancer類似,不過對象由節點變成了磁盤。它分為Discover、Plan與Execute三個階段,分別是計算磁盤不平衡度、生成平衡計劃與執行平衡計劃。關于它的設計細節,可以參考JIRA中的HDFS-1312:https://issues.apache.org/jira/browse/HDFS-1312。


配置完成后,重啟DataNode,然后SSH到該節點上,手動執行即可:生成平衡計劃(hadoop1為主機名)
hdfs diskbalancer -plan hadoop1
執行平衡計劃
hdfs diskbalancer -execute /system/diskbalancer/hadoop1.plan.json
查看執行狀態
hdfs diskbalancer -query hadoop1**在生產上面,由于有業務,不能停止,只能調節,數據平衡的閾值。**

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/173659.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息