這篇文章主要介紹HDFS中副本放置策略是什么,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)公司是一家企業(yè)級云計算解決方案提供商,超15年IDC數(shù)據(jù)中心運營經(jīng)驗。主營GPU顯卡服務(wù)器,站群服務(wù)器,服務(wù)器托管雅安,海外高防服務(wù)器,服務(wù)器機柜,動態(tài)撥號VPS,海外云手機,海外云服務(wù)器,海外服務(wù)器租用托管等。
云計算
云計算(cloud computing)是基于互聯(lián)網(wǎng)的相關(guān)服務(wù)的增加、使用和交付模式,通常涉及通過互聯(lián)網(wǎng)來提供動態(tài)易擴展且經(jīng)常是虛擬化的資源。云是網(wǎng)絡(luò)、互聯(lián)網(wǎng)的一種比喻說法。過去在圖中往往用云來表示電信網(wǎng),后來也用來表示互聯(lián)網(wǎng)和底層基礎(chǔ)設(shè)施的抽象。因此,云計算甚至可以讓你體驗每秒 10 萬億次的運算能力,擁有這么強大的計算能力可以模擬核爆炸、預(yù)測氣候變化和市場發(fā)展趨勢。用戶通過電腦、筆記本、手機等方式接入數(shù)據(jù)中心,按自己的需求進行運算。按照美國國家標準與技術(shù)研究院(NIST)定義:云計算是一種按使用量付費的模式,這種模式提供可用的、便捷的、按需的網(wǎng)絡(luò)訪問,進入可配置的計算資源共享池(資源包括網(wǎng)絡(luò)、服務(wù)器、存儲、應(yīng)用軟件、服務(wù)),這些資源能夠被快速提供,只需投入很少的管理工作,或與服務(wù)供應(yīng)商進行很少的交互。
云計算是分布式計算(Distributed Computing)、并行計算(Parallel Computing)、效用計算(Utility Computing)、網(wǎng)絡(luò)存儲(Network Storage Technologies)、虛擬化(Virtualization)、負載均衡(Load Balance)、熱備份冗余(High Available)等傳統(tǒng)計算機和網(wǎng)絡(luò)技術(shù)發(fā)展融合的產(chǎn)物。
云計算可以認為包括以下幾個層次的服務(wù):基礎(chǔ)設(shè)施即服務(wù)(IaaS),平臺即服務(wù)(PaaS)和軟件即服務(wù)(SaaS)。
云存儲
云存儲是在云計算概念上延伸和發(fā)展出來的一個新的概念,是指通過集群應(yīng)用、網(wǎng)格技術(shù)或分布式文件系統(tǒng)等功能,將網(wǎng)絡(luò)中大量各種不同類型的存儲設(shè)備通過應(yīng)用軟件集合起來協(xié)同工作,共同對外提供數(shù)據(jù)存儲和業(yè)務(wù)訪問功能的一個系統(tǒng)。當(dāng)云計算系統(tǒng)運算和處理的核心是大量數(shù)據(jù)的存儲和管理時,云計算系統(tǒng)中就需要配置大量的存儲設(shè)備,那么云計算系統(tǒng)就轉(zhuǎn)變成為一個云存儲系統(tǒng),所以云存儲是一個以數(shù)據(jù)存儲和管理為核心的云計算系統(tǒng)。簡單來說,云存儲就是將儲存資源放到云上供人存取的一種新興方案。使用者可以在任何時間、任何地方,通過任何可連網(wǎng)的裝置連接到云上方便地存取數(shù)據(jù)。
云存儲系統(tǒng)的結(jié)構(gòu)模型由 4 層組成。
存儲層
存儲層是云存儲最基礎(chǔ)的部分。存儲設(shè)備可以是 FC 光纖通道存儲設(shè)備,可以是 NAS 和 iSCSI 等 IP 存儲設(shè)備,也可以是 SCSI 或 SAS 等 DAS 存儲設(shè)備。云存儲中的存儲設(shè)備往往數(shù)量龐大且分布在多種不同地域,彼此之間通過廣域網(wǎng)、互聯(lián)網(wǎng)或者 FC 光纖通道網(wǎng)絡(luò)連接在一起。
存儲設(shè)備之上是一個統(tǒng)一存儲設(shè)備管理系統(tǒng),可以實現(xiàn)存儲設(shè)備的邏輯虛擬化管理、多鏈路冗余管理,以及硬件設(shè)備的狀態(tài)監(jiān)控和故障維護。
基礎(chǔ)管理
基礎(chǔ)管理層是云存儲最核心的部分,也是云存儲中最難以實現(xiàn)的部分。基礎(chǔ)管理層通過集群、分布式文件系統(tǒng)和網(wǎng)格計算等技術(shù),實現(xiàn)云存儲中多個存儲設(shè)備之間的協(xié)同工作,使多個的存儲設(shè)備可以對外提供同一種服務(wù),并提供更大更強更好的數(shù)據(jù)訪問性能。
應(yīng)用接口
應(yīng)用接口層是云存儲最靈活多變的部分。不同的云存儲運營單位可以根據(jù)實際業(yè)務(wù)類型,開發(fā)不同的應(yīng)用服務(wù)接口,提供不同的應(yīng)用服務(wù)。比如視頻監(jiān)控應(yīng)用平臺、IPTV 和視頻點播應(yīng)用平臺、網(wǎng)絡(luò)硬盤引用平臺,遠程數(shù)據(jù)備份應(yīng)用平臺等。
訪問層
任何一個授權(quán)用戶都可以通過標準的公用應(yīng)用接口來登錄云存儲系統(tǒng),享受云存儲服務(wù)。云存儲運營單位不同,云存儲提供的訪問類型和訪問手段也不同。
HDFS
Hadoop 分布式文件系統(tǒng) (HDFS) 被設(shè)計成適合運行在通用硬件 (commodity hardware) 上的分布式文件系統(tǒng)。它和現(xiàn)有的分布式文件系統(tǒng)有很多共同點。但同時,它和其他的分布式文件系統(tǒng)的區(qū)別也是很明顯的。HDFS 是一個高度容錯性的系統(tǒng),適合部署在廉價的機器上。HDFS 能提供高吞吐量的數(shù)據(jù)訪問,非常適合大規(guī)模數(shù)據(jù)集上的應(yīng)用。HDFS 放寬了一部分可移植操作系統(tǒng)接口 (POSIX) 約束,來實現(xiàn)流式讀取文件系統(tǒng)數(shù)據(jù)的目的。HDFS 在最開始是作為 Apache Nutch 搜索引擎項目的基礎(chǔ)架構(gòu)而開發(fā)的。HDFS 是 Apache Hadoop Core 項目的一部分。
以下是本文對 HDFS 及其副本放置策略的具體介紹說明。
副本技術(shù)
副本技術(shù)即分布式數(shù)據(jù)復(fù)制技術(shù),是分布式計算的一個重要組成部分。該技術(shù)允許數(shù)據(jù)在多個服務(wù)器端共享,一個本地服務(wù)器可以存取不同物理地點的遠程服務(wù)器上的數(shù)據(jù),也可以使所有的服務(wù)器均持有數(shù)據(jù)的拷貝。
通過副本技術(shù)可以有以下優(yōu)點:
(1) 提高系統(tǒng)可靠性:系統(tǒng)不可避免的會產(chǎn)生故障和錯誤,擁有多個副本的文件系統(tǒng)不會導(dǎo)致無法訪問的情況,從而提高了系統(tǒng)的可用性。另外,系統(tǒng)可以通過其他完好的副本對發(fā)生錯誤的副本進行修復(fù),從而提高了系統(tǒng)的容錯性。
(2) 負載均衡:副本可以對系統(tǒng)的負載量進行擴展。多個副本存放在不同的服務(wù)器上,可有效的分擔(dān)工作量,從而將較大的工作量有效的分布在不同的站點上。
(3) 提高訪問效率:將副本創(chuàng)建在訪問頻度較大的區(qū)域,即副本在訪問節(jié)點的附近,相應(yīng)減小了其通信開銷,從而提高了整體的訪問效率。
HDFS 架構(gòu)
圖1.HDFS 架構(gòu)圖
HDFS 是一個主從結(jié)構(gòu),一個 HDFS 集群有一個名字節(jié)點,它是一個管理文件命名空間和調(diào)節(jié)客戶端訪問文件的主服務(wù)器,當(dāng)然還有一些數(shù)據(jù)節(jié)點,通常是一個節(jié)點一個機器,它來管理對應(yīng)節(jié)點的存儲。HDFS 對外開放文件命名空間并允許用戶數(shù)據(jù)以文件形式存儲。
內(nèi)部機制是將一個文件分割成一個或多個塊,這些塊被存儲在一組數(shù)據(jù)節(jié)點中。名字節(jié)點用來操作文件命名空間的文件或目錄操作,如打開、關(guān)閉、重命名等等。它同時確定塊與數(shù)據(jù)節(jié)點的映射。數(shù)據(jù)節(jié)點來負責(zé)來自文件系統(tǒng)客戶的讀寫請求。數(shù)據(jù)節(jié)點同時還要執(zhí)行塊的創(chuàng)建、刪除、和來自名字節(jié)點的塊復(fù)制指令。
集群中只有一個名字節(jié)點極大地簡單化了系統(tǒng)的體系結(jié)構(gòu)。名字節(jié)點是仲裁者和所有 HDFS 元數(shù)據(jù)的倉庫,用戶的實際數(shù)據(jù)不經(jīng)過名字節(jié)點。
數(shù)據(jù)復(fù)制
HDFS 設(shè)計成能可靠地在集群中大量機器之間存儲大量的文件,它以塊序列的形式存儲文件。文件中除了最后一個塊,其他塊都有相同的大小。屬于文件的塊為了故障容錯而被復(fù)制。塊的大小和復(fù)制數(shù)是以文件為單位進行配置的,應(yīng)用可以在文件創(chuàng)建時或者之后修改復(fù)制因子。HDFS 中的文件是一次寫的,并且任何時候都只有一個寫操作。
名字節(jié)點負責(zé)處理與所有的塊復(fù)制相關(guān)的決策。它周期性地接受集群中數(shù)據(jù)節(jié)點的心跳和塊報告。一個心跳的到達表示這個數(shù)據(jù)節(jié)點是正常的。一個塊報告包括該數(shù)據(jù)節(jié)點上所有塊的列表。
副本放置策略
塊副本存放位置的選擇嚴重影響 HDFS 的可靠性和性能。HDFS 采用機架敏感(rack awareness)的副本存放策略來提高數(shù)據(jù)的可靠性、可用性和網(wǎng)絡(luò)帶寬的利用率。
圖2.副本放置策略圖
HDFS 運行在跨越大量機架的集群之上。兩個不同機架上的節(jié)點是通過交換機實現(xiàn)通信的,在大多數(shù)情況下,相同機架上機器間的網(wǎng)絡(luò)帶寬優(yōu)于在不同機架上的機器。
在開始的時候,每一個數(shù)據(jù)節(jié)點自檢它所屬的機架 id,然后在向名字節(jié)點注冊的時候告知它的機架 id。HDFS 提供接口以便很容易地掛載檢測機架標示的模塊。一個簡單但不是最優(yōu)的方式就是將副本放置在不同的機架上,這就防止了機架故障時數(shù)據(jù)的丟失,并且在讀數(shù)據(jù)的時候可以充分利用不同機架的帶寬。這個方式均勻地將復(fù)制分散在集群中,這就簡單地實現(xiàn)了組建故障時的負載均衡。然而這種方式增加了寫的成本,因為寫的時候需要跨越多個機架傳輸文件塊。
一般情況下復(fù)制因子(文件的副本數(shù))為 3,HDFS 的副本放置策略是:將第一個副本放在本地節(jié)點,將第二個副本放到本地機架上的另外一個節(jié)點,而將第三個副本放到不同機架上的節(jié)點。這種方式減少了機架間的寫流量,從而提高了寫的性能。機架故障的幾率遠小于節(jié)點故障。這種方式并不影響數(shù)據(jù)可靠性和可用性的限制,并且它確實減少了讀操作的網(wǎng)絡(luò)聚合帶寬,因為文件塊僅存在兩個不同的機架,而不是三個。文件的副本不是均勻地分布在機架當(dāng)中,1/3 副本在同一個節(jié)點上,1/3 副本在同一個機架上,另外 1/3 副本均勻地分布在其他機架上。這種方式提高了寫的性能,并且不影響數(shù)據(jù)的可靠性和讀性能
圖3.副本放置策略源碼分析圖
HDFS 副本放置策略缺陷
HDFS 的默認副本放置策略是一個隨機選擇策略,副本放置的最終狀態(tài)很難被控制。其具體表現(xiàn)如下:
(1) 其是利用將副本放置在不同的機架上來達到高可靠性和數(shù)據(jù)塊的均勻分布存儲的,但如果數(shù)據(jù)中心只有一個機架,那么該副本放置策略就退化為一個隨機選擇策略,數(shù)據(jù)塊的均勻分布和可靠性就很難被保證。
(2) 其并沒有考慮到節(jié)點負載的情況,即使有一個節(jié)點的負載遠高于其他節(jié)點,按照默認的副本放置策略,這個節(jié)點還是有可能被持續(xù)的寫入數(shù)據(jù)。
(3) 其主要是對前三個副本的放置位置做出了考慮,如果需要放置更多的副本,則后面的副本放置會采用隨機選擇的策略。
當(dāng)然在 HDFS 系統(tǒng)中也有個叫均衡器(Balancer)的守護進程。它會將數(shù)據(jù)塊從負載較高的節(jié)點移動到負載較低的節(jié)點上,從而達到數(shù)據(jù)塊重新分配的目的,最終使得整個集群分布均衡。雖然均衡器能在一定程度上解決問題,但是它也是存在缺陷的:
(1) 它對于集群數(shù)據(jù)塊均衡的調(diào)節(jié)具有滯后性。
(2) 均衡器的調(diào)節(jié)和數(shù)據(jù)塊的移動都需要一定資源的消耗。
因此,解決問題的關(guān)鍵是應(yīng)該放在最初副本的放置上而不是事后去補救。這也就需要對 HDFS 的副本放置策略做出適當(dāng)?shù)膬?yōu)化。
HDFS 副本放置策略優(yōu)化
根據(jù)上述所說的缺陷,本文提出了基于用戶信息和負載的副本放置策略 UILBPS(Placement Strategy based on User Information and Load Balance)。
基于 HDFS 的特性,在副本創(chuàng)建副本后的操作主要以讀取為主,即將負載均衡副本可用性和訪問速率作為副本放置策略的優(yōu)化目標。其中,副本訪問速率性能受到副本節(jié)點負載的影響,尤其是 I/O 負載會成為訪問的瓶頸;副本所在節(jié)點的狀態(tài)也會對副本訪問產(chǎn)生一定的影響,并影響到之后的負載均衡上。另外,同一用戶所創(chuàng)建的副本,其副本訪問在地域上有一定的相似性。因此,UILBPS 將通過副本訪問特征的提取和節(jié)點負載的計算,解決副本初始創(chuàng)建階段的副本數(shù)量和副本放置位置的確定問題。
副本訪問特征提取
對用戶副本放置特征的提取主要借助用戶的歷史信息。對于一個有歷史信息的用戶來說,其創(chuàng)建的副本已有一定的訪問記錄。我們定義副本訪問位置向量 cn_P 和訪問位置范圍 cn_cov 來提取副本訪問的特征。其中 cn_P 表示該副本被訪問的具體位置,cn_cov 表示訪問同一副本的客戶端(Client)的主要分布范圍。
對于有 k 條副本訪問位置記錄的數(shù)據(jù)塊 i,其 cn_cov 為其大于 q 條記錄所對應(yīng)的最小位置范圍(q=0.8k),若沒有這樣的范圍則 cn_cov 為全集。
提取過程如下:
(1) Client 隨機抽取用戶已創(chuàng)建的 n 個數(shù)據(jù)塊組成抽樣樣本集合。
(2) Client 向名字節(jié)點發(fā)送獲取集合 N 的副本個數(shù)信息和 cn_P 請求,獲得樣本副本個數(shù)集合和 cn_P 集合。
(3) Client 計算樣本集合中 n 個數(shù)據(jù)塊的副本平均值下界作為該次副本創(chuàng)建數(shù)量 rep_num。默認副本下界為 2,即至少有 2 個副本。
(4) Client 根據(jù)樣本的 cn_P 計算 cn_cov,并組成包含了 n 個副本位置范圍的集合 F={f1,f2,f3,……,fn}。
(5)Client 根據(jù)集合 F 來確定副本位置選擇集合 F'(F 子元素的并集)。
(6) Client 將 rep_num 和 F'發(fā)送給名字節(jié)點。
如下表所示,根據(jù)訪問節(jié)點的記錄,可以得出其訪問位置范圍為向量(0,86,0574)。
節(jié)點 | 洲 | 國際 | 地區(qū) | 訪問次數(shù) |
---|---|---|---|---|
a | 0 | 81 | 080 | 15 |
b | 0 | 86 | 021 | 21 |
c | 0 | 86 | 0574 | 109 |
d | 0 | 86 | 0574 | 81 |
e | 0 | 86 | 0574 | 90 |
f | 0 | 86 | 0580 | 17 |
g | 1 | 18 | 37 | 1 |
h | 3 | 55 | 089 | 9 |
i | 4 | 37 | 21 | 3 |
j | 5 | 145 | 03 | 2 |
節(jié)點負載
名字節(jié)點在獲得副本創(chuàng)建個數(shù)和副本位置選擇集合后,對處于副本位置選擇集合中的節(jié)點根據(jù)其負載情況,選擇 req_num 個負載低的節(jié)點進行副本放置。
其中節(jié)點負載越大表示磁盤越繁忙,已使用空間越多;越小表示磁盤空閑,已使用的空間越小。因此,通過考慮節(jié)點的負載情況,一方面可以避免因磁盤繁忙而導(dǎo)致數(shù)據(jù)塊寫操作的阻塞,從而導(dǎo)致系統(tǒng)性能的下降;一方面可以盡可能的使副本分布均衡,降低后續(xù)副本調(diào)整操作的壓力,節(jié)約系統(tǒng)資源。
因此以磁盤 I/O 負載和磁盤空間負載作為整個節(jié)點負載的主要影響因素。公式如下:
清單1.節(jié)點負載計算公式
LOAD=W1*IO + W2*SPACE
其中 W1 和 W2 是磁盤 I/O 負載和磁盤空間負載的權(quán)重值。
放置算法
圖 4. 副本創(chuàng)建流程圖
副本放置策略比較分析和思考
本節(jié)通過模擬數(shù)據(jù),進行 HDFS 默認算法與 UILBPS 算法進行比較分析。初始化模擬系統(tǒng)中有 3 個大洲,5 個國家,10 個地區(qū),10 個數(shù)據(jù)中心,20 個機架,200 個節(jié)點,20 個 Client,250 個數(shù)據(jù)及其 2~5 個副本。其中節(jié)點和 Client 隨機分布在各個不同的機架上,每個數(shù)據(jù)對象的副本也隨機分布在不同的節(jié)點上,且被 Client 訪問 10~20 次。不過同一 Client 的訪問節(jié)點有一定的相似性,保證訪問節(jié)點分布在一定的范圍。系統(tǒng)默認磁盤負載的權(quán)重值為 0.5。
下圖都是該模擬系統(tǒng)在重新創(chuàng)建 M 個數(shù)據(jù)對象后的比較:
圖5.負載分析圖
由上圖可見,在創(chuàng)建的數(shù)據(jù)對象 M 相同的情況下,UILBPS 的負載是明顯低于 HDFS 默認算法下的負載的,這正是因為考慮到了負載均衡的原因,盡可能的選擇那些負載較低的節(jié)點進行副本的放置的結(jié)果。
圖6.訪問速率分析圖
由上圖可見,在創(chuàng)建的數(shù)據(jù)對象 M 相同的情況下,UILBPS 的平均訪問距離是略小于 HDFS 默認算法下的負載的,這正是因為考慮到了用戶訪問特性的原因,使其 Client 能盡可能的訪問與其較近的節(jié)點,從而節(jié)約了網(wǎng)絡(luò)帶寬,減少了因網(wǎng)絡(luò)故障帶來的風(fēng)險,加快了節(jié)點訪問的速率。
HDFS 的機架敏感放置策略對其副本放置的位置是隨機的,而 UILBPS 則是基于用戶歷史信息和負載的,充分考慮了節(jié)點負載情況和用戶歷史訪問的地域特征,從某種程度來說對機架敏感放置策略進行了優(yōu)化,提高了系統(tǒng)的性能并均衡了系統(tǒng)負載,降低了用戶的訪問延遲,提高了數(shù)據(jù)的可用性。
因為 HDFS 系統(tǒng)將由數(shù)百或數(shù)千個存儲著文件數(shù)據(jù)片斷的服務(wù)器組成。實際上它里面有非常巨大的組成部分,每一個組成部分都很可能出現(xiàn)故障,這就意味著 HDFS 里的總是有一些部件是失效的,即硬件故障是常態(tài),而不是異常。那么如何自動快速的恢復(fù)是 HDFS 一個很重要的目標。而對副本放置策略的優(yōu)化則減少了系統(tǒng)負載,加快了副本的訪問速率,從而能將失效的部件盡快的恢復(fù)過來或者起到與原失效部件一樣的作用。
HDFS 有著高容錯性的特點,并且設(shè)計了用來部署在低廉的硬件上的特性。同時,用戶歷史信息和負載狀況都是通過名字節(jié)點來進行管理和計算。因此,優(yōu)化中附加的信息并不會很大程度上占用 HDFS 所需要的磁盤空間,也不會產(chǎn)生因磁盤空間的減少而帶來的系統(tǒng)性能下降問題。
對于因數(shù)據(jù)節(jié)點失效,副本損壞,數(shù)據(jù)節(jié)點磁盤損壞或者文件的復(fù)制因子增大等原因而導(dǎo)致的后續(xù)副本的調(diào)整來說,較好的副本位置更有利于副本的創(chuàng)建、刪除和遷移,即更有利于后續(xù)的副本調(diào)整,保證了分布式系統(tǒng)的一致性、可用性、分區(qū)容錯性。
以上是“HDFS中副本放置策略是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!