互聯(lián)網(wǎng)公司的 Hadoop 集群一般都會比較大,幾百臺服務器會分布在不同的機架上,甚至在不同的機房。出于保證數(shù)據(jù)安全性和數(shù)據(jù)傳輸?shù)母咝缘钠胶饪紤],HDFS希望不同節(jié)點之間的通信能夠盡量發(fā)生在同一個機架之內(nèi),而不是跨機架和跨機房。同時,NameNode 在分配 Block 的存儲位置的時候,會盡可能把數(shù)據(jù)塊的副本放到多個機架甚至機房中,防止機架出現(xiàn)事故或者機房出現(xiàn)事故時候的數(shù)據(jù)丟失問題發(fā)生。
這就是 HDFS 的機架感知,首先機房和機架的信息是需要用戶自己配置的,HDFS 沒法做到自動感知,然后根據(jù)配置的信息,NameNode 會有如下的副本放置策略。
- 第一個 block 副本放在 Client 所在的服務器,如果 client 不在集群服務器中,則這第一個 DataNode 會隨機選擇。
- 第二個副本放置在與第一個節(jié)點不同的機架中的節(jié)點中,保證機架間的高可用。
- 第三個有不同機房則跨機房隨機放置在某個節(jié)點上;只有一個機房則和第二副本在同一個機架,隨機放在不同的節(jié)點中。
- 更多的副本,則繼續(xù)隨機放置,需要注意的是一個節(jié)點最多放置一個副本。
HDFS 讀流程中如何找到最佳節(jié)點? 這個放置策略其實也就是上一篇中提到的 HDFS 讀流程中如何找到最佳節(jié)點的答案。讀的過程,會首先找離 Client 最近的 DataNode,保證讀的高效避免資源浪費,先后順序依次是:
1. 與 Client 在同一服務器
2. 在同一機架
3. 在同一個機房
4. 跨機房
更多關于“大數(shù)據(jù)培訓”的問題,歡迎咨詢千鋒教育在線名師。千鋒教育多年辦學,課程大綱緊跟企業(yè)需求,更科學更嚴謹,每年培養(yǎng)泛IT人才近2萬人。不論你是零基礎還是想提升,都可以找到適合的班型,千鋒教育隨時歡迎你來試聽。
注:本文部分文字和圖片來源于網(wǎng)絡,如有侵權,請聯(lián)系刪除。版權歸原作者所有!