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)
感謝閱讀,公眾號 「瘦風的南牆」 ,手機端閱讀更佳,還有其他福利和心得輸出,歡迎掃碼關注?
本文版權歸博主所有,歡迎轉載,但 [必須在頁面明顯位置標明原文連結],否則博主保留追究相關人士法律責任的權利。