1 - HDFS 的副本機制
HDFS 中的文件,在物理上都是以分塊(block)存儲的,塊大小可以通過 hdfs-site.xml
文件中的參數 dfs.block.size
進行設置:
<!-- 塊大小,單位:Byte -->
<property>
<name>dfs.block.size</name>
<value>134217728</value>
</property>
分塊存儲的好處有:
1)一個文件有可能大於集群中的所有磁盤,塊機制可以很好地解決這個問題;
2) 使用塊作為文件存儲的邏輯單位,可以簡化存儲子系統;
3)塊非常適合用於數據備份(冗余的數據副本),進而提供數據容錯能力。
文件塊的副本存儲示例圖:

在 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%
參考資料
版權聲明
出處:博客園-瘦風的南牆(https://www.cnblogs.com/shoufeng)
感謝閱讀,公眾號 「瘦風的南牆」 ,手機端閱讀更佳,還有其他福利和心得輸出,歡迎掃碼關注🤝
本文版權歸博主所有,歡迎轉載,但 [必須在頁面明顯位置標明原文鏈接],否則博主保留追究相關人士法律責任的權利。