HDFS 02 - HDFS 的機制:副本機制、機架感知機制、負載均衡機制

瘦風發表於2021-02-20

1 - HDFS 的副本機制

HDFS 中的檔案,在物理上都是以分塊(block)儲存的,塊大小可以通過 hdfs-site.xml 檔案中的引數 dfs.block.size 進行設定:

<!-- 塊大小,單位:Byte -->
<property>
    <name>dfs.block.size</name>
    <value>134217728</value>
</property> 

分塊儲存的好處有:

1)一個檔案有可能大於叢集中的所有磁碟,塊機制可以很好地解決這個問題;

2) 使用塊作為檔案儲存的邏輯單位,可以簡化儲存子系統;

3)塊非常適合用於資料備份(冗餘的資料副本),進而提供資料容錯能力。

檔案塊的副本儲存示例圖:

HDFS 02 - HDFS 的機制:副本機制、機架感知機制、負載均衡機制

在 Hadoop 1.x 版本中,block 大小預設是 64M,Hadoop 2.x 版本預設是 128M。

塊大小的設定是否合理,對系統效能影響很大:

設定太小,會增加定址時間。

設定太大,從磁碟傳輸資料的時間會明顯大於定位該 block 起始位置所需的時間,進而導致程式在處理此 block 資料時速度很慢。

2 - HDFS 的機架感知機制

HDFS 的機架感知,又叫機架策略,用來決定副本存放位置的策略。

以預設的副本數=3為例:

1)第一個副本塊儲存在客戶端所在的 DataNode 上;

2)第二個副本塊儲存在客戶端所在 DataNode 同機架內的其他 DataNode 上;

3)第三個副本塊儲存不同機架的某個 DataNode 上。

生產環境中,需要手動配置機架策略。

3 - HDFS 的負載均衡機制

HDFS 的負載均衡機制,可以做到讓每個 DataNode 上儲存的資料的百分比相差不那麼大。

HDFS 有一個自動的負載均衡操作,傳輸速度相對較慢,在叢集規模較小的時候是可行的:

<!-- 叢集空閒情況下,1M/s -->
 <property>
      <name>dfs.datanode.balance.bandwidthPerSec</name>
      <value>1048576</value>
 </property>

如果叢集規模較大,為了防止負載均衡對正常的業務讀寫造成影響,應當在叢集空閒的時候,手動執行負載均衡。

手動命令如下:

# 任意兩個節點之間的儲存百分比不超過10%
sbin/start-balancer.sh -t 10%

參考資料

HDFS組成架構及四大機制

版權宣告

作者:瘦風(https://healchow.com)

出處:部落格園-瘦風的南牆(https://www.cnblogs.com/shoufeng)

感謝閱讀,公眾號 「瘦風的南牆」 ,手機端閱讀更佳,還有其他福利和心得輸出,歡迎掃碼關注?

本文版權歸博主所有,歡迎轉載,但 [必須在頁面明顯位置標明原文連結],否則博主保留追究相關人士法律責任的權利。

相關文章