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