HOME 首頁(yè)
SERVICE 服務(wù)產(chǎn)品
XINMEITI 新媒體代運(yùn)營(yíng)
CASE 服務(wù)案例
NEWS 熱點(diǎn)資訊
ABOUT 關(guān)于我們
CONTACT 聯(lián)系我們
創(chuàng)意嶺
讓品牌有溫度、有情感
專(zhuān)注品牌策劃15年

    hdfs快照原理(hadoop快照)

    發(fā)布時(shí)間:2023-04-08 00:58:09     稿源: 創(chuàng)意嶺    閱讀: 149        

    大家好!今天讓創(chuàng)意嶺的小編來(lái)大家介紹下關(guān)于hdfs快照原理的問(wèn)題,以下是小編對(duì)此問(wèn)題的歸納整理,讓我們一起來(lái)看看吧。

    開(kāi)始之前先推薦一個(gè)非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對(duì)話(huà)答疑等等

    只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫(xiě)出的就越詳細(xì),有微信小程序端、在線(xiàn)網(wǎng)頁(yè)版、PC客戶(hù)端

    官網(wǎng):https://ai.de1919.com。

    創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務(wù)客戶(hù)遍布全球各地,如需了解SEO相關(guān)業(yè)務(wù)請(qǐng)撥打電話(huà)175-8598-2043,或添加微信:1454722008

    本文目錄:

    hdfs快照原理(hadoop快照)

    一、HDFS讀寫(xiě)和冷備份原理

    當(dāng)用戶(hù)通過(guò)命令行或者JavaAPI向Hadoop集群發(fā)起寫(xiě)入文件操作時(shí),將觸發(fā)寫(xiě)文件流程,分為3個(gè)階段:創(chuàng)建文件,建立數(shù)據(jù)流管道和寫(xiě)數(shù)據(jù)。

    數(shù)據(jù)傳輸過(guò)程中,如果datanode2突然掛掉了,HDFS會(huì)啟動(dòng)如下步驟進(jìn)行容錯(cuò)。

    namenode負(fù)責(zé)HDFS集群的元數(shù)據(jù)管理,要保證快速檢索,namenode必須將數(shù)據(jù)放到內(nèi)存中,但一旦斷電或者故障,元數(shù)據(jù)會(huì)全部丟失,因此還必須在磁盤(pán)上做持久化。HDFS集群做元數(shù)據(jù)持久化的方式是edits.log+FSImage。edits.log存儲(chǔ)近期的操作,F(xiàn)SImage存儲(chǔ)以前的操作,這樣是為了盡可能地保障namenode的啟動(dòng)速度。

    二、Hadoop文檔(2.9.2) - HDFS架構(gòu)

    Hadoop分布式文件系統(tǒng)(HDFS)是一種運(yùn)行在通用硬件上的分布式文件系統(tǒng)。它與傳統(tǒng)的分布式文件系統(tǒng)有很多相似之處,但是也有顯著的不同。HDFS是高容錯(cuò)的,可以部署在低成本硬件上。HDFS提供了對(duì)應(yīng)用數(shù)據(jù)的高吞吐量訪問(wèn),適用于具有大數(shù)據(jù)集的應(yīng)用。HDFS為了流數(shù)據(jù)訪問(wèn)放松了一些POSIX的限制。

    HDFS是主從結(jié)構(gòu)。一個(gè)HDFS集群由一個(gè)NameNode和一組DataNode組成。NameNode是主服務(wù)器,負(fù)責(zé)管理文件系統(tǒng)命名空間以及客戶(hù)端對(duì)文件的訪問(wèn)。DataNode通常每個(gè)節(jié)點(diǎn)一個(gè),負(fù)責(zé)管理存儲(chǔ)。HDFS對(duì)外暴露了一個(gè)文件系統(tǒng)命名空間并允許用戶(hù)數(shù)據(jù)作為文件存儲(chǔ)。在內(nèi)部實(shí)現(xiàn)上,一個(gè)文件會(huì)被分割成一個(gè)或多個(gè)block,這些block存儲(chǔ)在一組DataNode上。NameNode負(fù)責(zé)執(zhí)行文件系統(tǒng)命名空間操作,例如打開(kāi),關(guān)閉,重命名文件和目錄等。此外NameNode還維護(hù)著block和DataNode之間的映射關(guān)系。DataNode負(fù)責(zé)處理來(lái)自客戶(hù)端的讀寫(xiě)請(qǐng)求,并根據(jù)NameNode的指令創(chuàng)建,刪除,備份block。

    NameNode和DataNode都是運(yùn)行在通用機(jī)器上的軟件。這些機(jī)器通常使用Linux系統(tǒng)。HDFS使用Java構(gòu)建,任何支持Java的機(jī)器都可以運(yùn)行NameNode和DataNode。一種典型的集群部署方式是使用一臺(tái)機(jī)器運(yùn)行NameNode,其它機(jī)器每臺(tái)運(yùn)行一個(gè)DataNode實(shí)例。

    HDFS使用傳統(tǒng)的分層文件結(jié)構(gòu)。用戶(hù)可以創(chuàng)建目錄并在目錄下存儲(chǔ)文件。文件系統(tǒng)命名空間結(jié)構(gòu)與傳統(tǒng)文件系統(tǒng)類(lèi)似,用戶(hù)可以創(chuàng)建,刪除文件,將文件從一個(gè)目錄移動(dòng)到另一個(gè)目錄,重命名文件。HDFS支持用戶(hù)限額和訪問(wèn)權(quán)限。

    NameNode維護(hù)整個(gè)文件系統(tǒng)命名空間,它會(huì)記錄任何對(duì)命名空間的修改。應(yīng)用程序可以指定HDFS中文件的備份數(shù)量。文件的拷貝數(shù)稱(chēng)為該文件的備份因子。這個(gè)信息也存儲(chǔ)在NameNode中。

    HDFS可以跨機(jī)器存儲(chǔ)海量文件。每個(gè)文件分成一個(gè)block的序列存儲(chǔ)。為了容錯(cuò),文件的block會(huì)被備份。每個(gè)文件的block大小和備份因子都是可配置的。

    文件中所有block的大小是相等的(除了最后一個(gè)),而對(duì)append和hsync提供可變長(zhǎng)block支持后,用戶(hù)可以直接創(chuàng)建一個(gè)新block,不必繼續(xù)填充最后一個(gè)block。

    應(yīng)用程序可以指定文件的備份數(shù)。備份因子可在文件創(chuàng)建時(shí)指定,也可以稍后修改。HDFS的文件都是一次寫(xiě)入的(除了append和truncate),并且任何時(shí)候都只有一個(gè)寫(xiě)入器。

    NameNode決定如何備份block。它周期性的接收來(lái)自DataNode的心跳檢測(cè)和block報(bào)表。收到心跳檢測(cè)說(shuō)明DataNode工作正常,block報(bào)表包含該DataNode上的所有block。

    備份文件的位置對(duì)HDFS的可用性和性能至關(guān)重要。對(duì)備份的優(yōu)化讓HDFS從眾多分布式系統(tǒng)中脫穎而出。這個(gè)工作需要大量的優(yōu)化和經(jīng)驗(yàn)。機(jī)架感知備份放置策略的目的是提高數(shù)據(jù)的可靠性,可用性和網(wǎng)絡(luò)帶寬利用率。目前的備份放置策略實(shí)現(xiàn)是這個(gè)方向上的第一步。短期目標(biāo)是在生產(chǎn)環(huán)境上對(duì)其進(jìn)行驗(yàn)證,更多的了解它的行為,為測(cè)試和研究更復(fù)雜的策略奠定基礎(chǔ)。

    大型HDFS集群的機(jī)器通常隸屬于多個(gè)機(jī)架。兩個(gè)不同機(jī)架上的節(jié)點(diǎn)進(jìn)行通信必須通過(guò)交換機(jī)。一般來(lái)說(shuō),同一機(jī)架機(jī)器之間的網(wǎng)絡(luò)帶寬要優(yōu)于不同機(jī)架機(jī)器間的網(wǎng)絡(luò)帶寬。

    NameNode通過(guò)Hadoop Rack Awareness進(jìn)程確定每個(gè)DataNode所屬的機(jī)架ID。一個(gè)簡(jiǎn)單但是并非最優(yōu)的策略是將備份放置在獨(dú)立的機(jī)架上。這種策略可以避免機(jī)架故障時(shí)丟失數(shù)據(jù),讀數(shù)據(jù)時(shí)也可以利用多個(gè)機(jī)架的網(wǎng)絡(luò)帶寬。這種策略在集群中平均分配備份文件,這樣組件發(fā)生故障時(shí)可以平衡負(fù)載。但是這種策略會(huì)增加寫(xiě)入成本,因?yàn)閿?shù)據(jù)需要跨機(jī)架傳輸。

    最常見(jiàn)的情況,備份因子是3。HDFS的放置策略是:如果寫(xiě)入器位于DataNode上,則將副本放置在本地計(jì)算機(jī),否則隨機(jī)選擇一個(gè)DataNode,另一個(gè)副本放置在另一個(gè)遠(yuǎn)程機(jī)架的節(jié)點(diǎn)上,最后一個(gè)副本放在同一個(gè)遠(yuǎn)程機(jī)架的另一個(gè)節(jié)點(diǎn)上。這種策略減少了機(jī)架間的寫(xiě)入流量,從而提高寫(xiě)性能。機(jī)架發(fā)生故障的幾率遠(yuǎn)小于節(jié)點(diǎn)故障幾率。這種策略并不影響數(shù)據(jù)可靠性和可用性,但是它確實(shí)減少了讀操作時(shí)的聚合網(wǎng)絡(luò)帶寬,因?yàn)橐粋€(gè)block被放置到兩個(gè)機(jī)架上而不是三個(gè)。這種策略的文件副本并不是均勻的分布在所有機(jī)架上,副本的三分之一位于一個(gè)節(jié)點(diǎn),剩下的三分之二位于另一個(gè)機(jī)架上。這種策略可以提高寫(xiě)性能,而不會(huì)影響數(shù)據(jù)可靠性和讀性能。

    如果備份因子大于3,那么第四個(gè)和之后的副本隨機(jī)放置,同時(shí)要保證副本數(shù)量不能超過(guò)機(jī)架的上限(公式: (replicas - 1) / racks + 2 )。

    由于DataNode不能放置同一個(gè)block的多個(gè)副本,所以最大備份因子就是最大DataNode數(shù)。

    在提供了存儲(chǔ)類(lèi)型和存儲(chǔ)策略的支持之后,除了機(jī)架感知,NameNode放置副本時(shí)也會(huì)考慮放置策略。NameNode首先根據(jù)機(jī)架感知選擇節(jié)點(diǎn),然后根據(jù)備份文件的放置策略檢查該節(jié)點(diǎn)的存儲(chǔ)類(lèi)型,如果該候選節(jié)點(diǎn)沒(méi)有要求的存儲(chǔ)類(lèi)型,NameNode會(huì)查找下一個(gè)節(jié)點(diǎn)。如果第一輪沒(méi)有找到足夠的節(jié)點(diǎn)放置備份,NameNode會(huì)使用后備存儲(chǔ)類(lèi)型開(kāi)始第二輪查找。

    目前,副本放置策略依然在開(kāi)發(fā)中。

    為了減少帶寬消耗和讀延遲,HDFS會(huì)嘗試找尋一個(gè)離讀請(qǐng)求最近的副本。如果讀請(qǐng)求節(jié)點(diǎn)所在機(jī)架有這樣一個(gè)副本,HDFS就優(yōu)先使用這個(gè)副本。如果HDFS集群跨越多個(gè)數(shù)據(jù)中心,則本地?cái)?shù)據(jù)中心的副本優(yōu)先于遠(yuǎn)程副本。

    啟動(dòng)HDFS時(shí),NameNode會(huì)進(jìn)入一種稱(chēng)為安全模式的特殊狀態(tài)。安全模式下數(shù)據(jù)block無(wú)法備份。NameNode會(huì)從DataNode接收心跳檢測(cè)和block報(bào)表。block報(bào)表包含該DataNode下所有數(shù)據(jù)block的列表信息。每個(gè)block都有一個(gè)指定的最小備份數(shù)。只有block的最小備份數(shù)登記到NameNode中后,block才可以備份。備份登記結(jié)束后,NameNode退出安全模式。這是如果還有block不滿(mǎn)足最小備份數(shù)的條件,NameNode才開(kāi)始備份這些block。

    HDFS命名空間由NameNode保存,NameNode使用一個(gè)稱(chēng)為EditLog的事務(wù)日志記錄對(duì)文件系統(tǒng)元數(shù)據(jù)的所有更改。例如,創(chuàng)建一個(gè)新文件會(huì)在EditLog中插入一條對(duì)應(yīng)記錄,同樣的,修改文件備份因子也會(huì)插入一條記錄。NameNode使用本地文件存儲(chǔ)EditLog。整個(gè)文件系統(tǒng)命名空間,包括文件與block之間的映射關(guān)系,文件系統(tǒng)數(shù)據(jù)等,都保存在FsImage文件中。

    NameNode在內(nèi)存中維護(hù)文件系統(tǒng)命名空間和文件block映射關(guān)系的鏡像。當(dāng)NameNode啟動(dòng),或者某個(gè)閾值觸發(fā)了檢查點(diǎn)時(shí),NameNode從磁盤(pán)上讀取FsImage和EditLog的內(nèi)容,將所有EditLog中的事務(wù)操作應(yīng)用到FsImage的內(nèi)存鏡像中,然后在磁盤(pán)上生成一個(gè)全新的FsImage。之后可以截?cái)郋ditLog,因?yàn)樗惺聞?wù)都已持久化到FsImage。這個(gè)過(guò)程稱(chēng)為檢查點(diǎn)。檢查點(diǎn)的目的是通過(guò)獲取文件系統(tǒng)元數(shù)據(jù)的快照并保存到FsImage來(lái)保證HDFS文件系統(tǒng)元數(shù)據(jù)的一致性。讀取FsImage可能很快,但是持續(xù)編輯FsImage就不同了。因此我們將操作記錄到EditLog中,而不是直接修改FsImage。在檢查點(diǎn)期間,所有EditLog操作應(yīng)用到FsImage。檢查點(diǎn)可以按周期觸發(fā)( dfs.namenode.checkpoint.period ),也可以按事務(wù)數(shù)觸發(fā)( dfs.namenode.checkpoint.txns )。如果兩個(gè)屬性都設(shè)置了,第一個(gè)滿(mǎn)足的閾值會(huì)觸發(fā)檢查點(diǎn)。

    DataNode在本地文件系統(tǒng)中存儲(chǔ)HDFS數(shù)據(jù)。DataNode對(duì)HDFS文件一無(wú)所知,它以block為單位存儲(chǔ)HDFS數(shù)據(jù)。DataNode不會(huì)在同一個(gè)目錄下保存所有文件。相反,它使用啟發(fā)式方法來(lái)確定每個(gè)目錄的最佳文件數(shù),并適時(shí)創(chuàng)建子目錄。在同一個(gè)目錄下創(chuàng)建所有文件并不是最佳選擇,因?yàn)楸镜匚募到y(tǒng)可能無(wú)法支持一個(gè)目錄下的大量文件。DataNode啟動(dòng)時(shí),它會(huì)掃描整個(gè)本地文件系統(tǒng),生成一個(gè)本地文件與數(shù)據(jù)block之間的關(guān)系列表,將其發(fā)送給NameNode,這個(gè)列表稱(chēng)為block報(bào)告。

    所有HDFS通信協(xié)議都構(gòu)建在TCP/IP協(xié)議之上??蛻?hù)端通過(guò)TCP端口與NameNode建立連接,它使用ClientProtocol與NameNode交互。DataNode使用DataProtocol與NameNode交互。一個(gè)RPC抽象封裝了客戶(hù)端協(xié)議和DataNode協(xié)議。NameNode從不初始化任何RPC,它只是響應(yīng)來(lái)自的客戶(hù)端和DataNode的請(qǐng)求。

    HDFS的主要目標(biāo)是即使出現(xiàn)故障也可以可靠的存儲(chǔ)數(shù)據(jù)。三種常見(jiàn)的故障分別是:NameNode故障,DataNode故障和網(wǎng)絡(luò)分區(qū)。

    DataNode周期性的發(fā)送心跳檢測(cè)給NameNode。網(wǎng)絡(luò)分區(qū)可能導(dǎo)致某些DataNode無(wú)法連接NameNode。NameNode無(wú)法收到DataNode的心跳檢測(cè)后,它會(huì)把這樣的DataNode標(biāo)記為dead,并不在發(fā)送新的I/O請(qǐng)求。注冊(cè)到死亡DataNode上的數(shù)據(jù)對(duì)HDFS來(lái)說(shuō)不再可用,也會(huì)導(dǎo)致某些block的備份數(shù)少于文件指定的最小備份數(shù)。NameNode持續(xù)追蹤block的備份情況并在必要時(shí)初始化備份操作。重備份的原因是多種多樣的:DataNode不可用,某個(gè)備份文件損壞,DataNode磁盤(pán)故障,或者文件的備份因子增大。

    為了避免DataNode狀態(tài)抖動(dòng)引起的備份風(fēng)暴,標(biāo)記DataNode死亡的超時(shí)時(shí)間設(shè)置的很長(zhǎng)(默認(rèn)超過(guò)10分鐘)。用戶(hù)可以設(shè)置一個(gè)更短的時(shí)間將DataNode標(biāo)記為陳舊(stale),這樣可以避免對(duì)性能敏感的工作負(fù)載的陳舊DataNode的讀寫(xiě)操作。

    HDFS架構(gòu)與數(shù)據(jù)重平衡scheme兼容。scheme可以在DataNode的磁盤(pán)空間低于某個(gè)閾值時(shí)將數(shù)據(jù)移動(dòng)到另一個(gè)DataNode上。如果對(duì)某個(gè)文件的需求特別高,scheme還可以動(dòng)態(tài)創(chuàng)建額外的副本并平衡到整個(gè)集群中。這些數(shù)據(jù)平衡scheme還未實(shí)現(xiàn)。

    從DataNode中讀取的block可能是損壞的。損壞的原因有多種:磁盤(pán)故障,網(wǎng)絡(luò)故障,或者軟件問(wèn)題。HDFS客戶(hù)端會(huì)對(duì)文件內(nèi)容進(jìn)行校驗(yàn)和檢查。當(dāng)客戶(hù)端創(chuàng)建一個(gè)HDFS文件時(shí),它會(huì)計(jì)算出文件所有block的校驗(yàn)和并保存在同一個(gè)命名空間的一個(gè)獨(dú)立的隱藏文件中。當(dāng)客戶(hù)單檢索文件時(shí)還要檢查對(duì)應(yīng)校驗(yàn)和文件中的值。如果校驗(yàn)和不匹配,客戶(hù)端會(huì)嘗試該block其它節(jié)點(diǎn)上的副本。

    FsImage和EditLog是HDFS的核心數(shù)據(jù)結(jié)構(gòu)。如果它們發(fā)生損壞,HDFS就無(wú)法使用了。因此,可以通過(guò)配置讓NameNode維護(hù)多個(gè)FsImage和EditLog的拷貝。對(duì)兩個(gè)文件的修改會(huì)同步到所有拷貝中。這種同步操作會(huì)降低NameNode的TPS,但是這種犧牲是可接受的,因?yàn)镠DFS是數(shù)據(jù)密集,不是元數(shù)據(jù)密集。NameNode重啟時(shí),它會(huì)選擇最一致的FsImage和EditLog使用。

    另一種減低故障的辦法是使用HA。

    (略)

    HDFS的目的是支持大型文件。HDFS支持一次寫(xiě)入多次讀取。一個(gè)典型的block大小是128MB。因此,HDFS文件按照128MB的大小分割,每個(gè)block可能分布在不同的節(jié)點(diǎn)上。

    客戶(hù)端向HDFS文件寫(xiě)入數(shù)據(jù)時(shí),如果備份因子是三,NameNode使用備份目標(biāo)選擇算法檢索出一組DataNode。這個(gè)列表是可以存儲(chǔ)副本的DataNode??蛻?hù)端先向第一個(gè)DataNode寫(xiě)入數(shù)據(jù),DataNode接收數(shù)據(jù)并將數(shù)據(jù)傳輸?shù)搅斜碇械牡诙€(gè)DataNode。第二個(gè)DataNode開(kāi)始接收數(shù)據(jù)并繼續(xù)傳輸數(shù)據(jù)到第三個(gè)DataNode。這樣,數(shù)據(jù)通過(guò)管道從一個(gè)DataNode傳輸?shù)较乱粋€(gè)。

    (略)

    如果開(kāi)啟了trash配置,從FS shell中刪除的文件并不會(huì)立刻從HDFS中刪除,HDFS將它移動(dòng)到一個(gè)trash目錄(每個(gè)用戶(hù)都有自己的trash目錄, /user/<username>/.Trash )。只要文件還在trash目錄中就可以快速恢復(fù)。

    最近刪除的文件移動(dòng)到 /user/<username>/.Trash/Current 目錄中,每隔一段時(shí)間,HDFS會(huì)為這些文件創(chuàng)建檢查點(diǎn)文件( /user/<username>/.Trash/<date> )并刪除舊檢查點(diǎn)文件。

    如果trash中的文件過(guò)期了,NameNode將這些文件從命名空間中刪除。與文件關(guān)聯(lián)的block被釋放。刪除文件和空間釋放之間可能會(huì)有延遲。

    下面是一個(gè)例子,首先創(chuàng)建兩個(gè)文件:

    然后刪除test1,該文件會(huì)被移到Trash目錄:

    接著跳過(guò)Trash刪除test2:

    現(xiàn)在可以查看Trash目錄:

    文件的備份因子降低后,NameNode選擇可以刪除的副本,在下次心跳檢測(cè)時(shí)把信息發(fā)送給DataNode,之后DataNode刪除block并釋放空間。

    三、HDFS詳解

    認(rèn)識(shí)HDFS

    HDFS的特點(diǎn):

    HDFS不適用的場(chǎng)景

    HDFS的組成

    HDFS的數(shù)據(jù)復(fù)制

    HDFS復(fù)制的選擇

    HDFS的安全模式

    HDFS的元數(shù)據(jù)持久化

    HDFS架構(gòu)

    數(shù)據(jù)塊

    為什么HDFS默認(rèn)的Block為128MB(64MB)?

    分布式文件系統(tǒng)中的塊進(jìn)行抽象帶來(lái)的好處:

    NameNode

    NameNode主要功能如下:

    DataNode

    SecondaryNameNode

    SecondaryNameNode合并Fsimage和EditsLog文件過(guò)程如下:

    CheckPoint過(guò)程如下:

    SecondaryNameNode會(huì)周期性地將EditsLog文件進(jìn)行合并,合并前提條件如下:

    機(jī)架感知

    HDFS的RPC機(jī)制

    RPC的實(shí)現(xiàn)流程

    RPC的實(shí)體模型

    HDFS的文件讀取

    文件讀取的流程如下:

    HDFS的文件寫(xiě)入

    寫(xiě)入文件的過(guò)程比讀取復(fù)雜,步驟如下:

    HDFS的HA(High Availability,高可用性)機(jī)制

    HA架構(gòu)解釋如下:

    HDFS的federation機(jī)制

    HDFS Federation使用了多個(gè)獨(dú)立的NameNode/NameSpace使得HDFS的命名服務(wù)能夠水平擴(kuò)展

    HDFS Federation中的NameNode之間是聯(lián)盟關(guān)系,它們之間相互獨(dú)立且不需要相互協(xié)調(diào)。HDFS Federation中的NameNode提供了名字空間和塊關(guān)聯(lián)功能.HDFS Federation中的DataNode被所有的NameNode用作公共存儲(chǔ)塊的地方.每一個(gè)DataNode都會(huì)向所在集群中所有的NameNode注冊(cè),并周期性的發(fā)送心跳和塊信息報(bào)告,同時(shí)處理來(lái)自NameNode的指令

    在HDFS中,所有的更新、回滾都是以NameNode和BlockPool為單元發(fā)生的.即同HDFS Federation中不同的NameNode/BlockPool之間沒(méi)有什么關(guān)系

    多個(gè)名字空間的管理問(wèn)題

    HDFS Federation中名字空間管理的基本原理:

    維護(hù)HDFS

    追加數(shù)據(jù)

    并行復(fù)制

    升級(jí)與回滾

    兩種升級(jí)升級(jí)都簡(jiǎn)單分為以下幾步:

    添加節(jié)點(diǎn)

    刪除節(jié)點(diǎn)

    HDFS權(quán)限管理

    四、HDFS中的塊與普通文件系統(tǒng)的塊有什么區(qū)別?

    分布式文件系統(tǒng)很多,包括GFS,HDFS,HDFS基本可以認(rèn)為是GFS的一個(gè)簡(jiǎn)化版實(shí)現(xiàn),二者因此有很多相似之處。首先,GFS和HDFS都采用單一主控機(jī)+多臺(tái)工作機(jī)的模式,由一臺(tái)主控機(jī)(Master)存儲(chǔ)系統(tǒng)全部元數(shù)據(jù),并實(shí)現(xiàn)數(shù)據(jù)的分布、復(fù)制、備份決策,主控機(jī)還實(shí)現(xiàn)了元數(shù)據(jù)的checkpoint和操作日志記錄及回放功能。工作機(jī)存儲(chǔ)數(shù)據(jù),并根據(jù)主控機(jī)的指令進(jìn)行數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)遷移和數(shù)據(jù)計(jì)算等。其次,GFS和HDFS都通過(guò)數(shù)據(jù)分塊和復(fù)制(多副本,一般是3)來(lái)提供更高的可靠性和更高的性能。當(dāng)其中一個(gè)副本不可用時(shí),系統(tǒng)都提供副本自動(dòng)復(fù)制功能。同時(shí),針對(duì)數(shù)據(jù)讀多于寫(xiě)的特點(diǎn),讀服務(wù)被分配到多個(gè)副本所在機(jī)器,提供了系統(tǒng)的整體性能。最后,GFS和HDFS都提供了一個(gè)樹(shù)結(jié)構(gòu)的文件系統(tǒng),實(shí)現(xiàn)了類(lèi)似與Linux下的文件復(fù)制、改名、移動(dòng)、創(chuàng)建、刪除操作以及簡(jiǎn)單的權(quán)限管理等。然而,GFS和HDFS在關(guān)鍵點(diǎn)的設(shè)計(jì)上差異很大,HDFS為了規(guī)避GFS的復(fù)雜度進(jìn)行了很多簡(jiǎn)化。首先,GFS最為復(fù)雜的部分是對(duì)多客戶(hù)端并發(fā)追加同一個(gè)文件,即多客戶(hù)端并發(fā)Append模型 。GFS允許文件被多次或者多個(gè)客戶(hù)端同時(shí)打開(kāi)以追加數(shù)據(jù),以記錄為單位。假設(shè)GFS追加記錄的大小為16KB ~ 16MB之間,平均大小為1MB,如果每次追加都訪問(wèn)GFS Master顯然很低效,因此,GFS通過(guò)Lease機(jī)制將每個(gè)Chunk的寫(xiě)權(quán)限授權(quán)給Chunk Server。寫(xiě)Lease的含義是Chunk Server對(duì)某個(gè)Chunk在Lease有效期內(nèi)(假設(shè)為12s)有寫(xiě)權(quán)限,擁有Lease的Chunk Server稱(chēng)為Primary Chunk Server,如果Primary Chunk Server宕機(jī),Lease有效期過(guò)后Chunk的寫(xiě)Lease可以分配給其它Chunk Server。多客戶(hù)端并發(fā)追加同一個(gè)文件導(dǎo)致Chunk Server需要對(duì)記錄進(jìn)行定序,客戶(hù)端的寫(xiě)操作失敗后可能重試,從而產(chǎn)生重復(fù)記錄,再加上客戶(hù)端API為異步模型,又產(chǎn)生了記錄亂序問(wèn)題。Append模型下重復(fù)記錄、亂序等問(wèn)題加上Lease機(jī)制,尤其是同一個(gè)Chunk的Lease可能在Chunk Server之間遷移,極大地提高了系統(tǒng)設(shè)計(jì)和一致性模型的復(fù)雜度。而在HDFS中,HDFS文件只允許一次打開(kāi)并追加數(shù)據(jù),客戶(hù)端先把所有數(shù)據(jù)寫(xiě)入本地的臨時(shí)文件中,等到數(shù)據(jù)量達(dá)到一個(gè)Chunk的大小(通常為64MB),請(qǐng)求HDFS Master分配工作機(jī)及Chunk編號(hào),將一個(gè)Chunk的數(shù)據(jù)一次性寫(xiě)入HDFS文件。由于累積64MB數(shù)據(jù)才進(jìn)行實(shí)際寫(xiě)HDFS系統(tǒng),對(duì)HDFS Master造成的壓力不大,不需要類(lèi)似GFS中的將寫(xiě)Lease授權(quán)給工作機(jī)的機(jī)制,且沒(méi)有了重復(fù)記錄和亂序的問(wèn)題,大大地簡(jiǎn)化了系統(tǒng)的設(shè)計(jì)。然而,我們必須知道,HDFS由于不支持Append模型帶來(lái)的很多問(wèn)題,構(gòu)建于HDFS之上的Hypertable和HBase需要使用HDFS存放表格系統(tǒng)的操作日志,由于HDFS的客戶(hù)端需要攢到64MB數(shù)據(jù)才一次性寫(xiě)入到HDFS中,Hypertable和HBase中的表格服務(wù)節(jié)點(diǎn)(對(duì)應(yīng)于Bigtable中的Tablet Server)如果宕機(jī),部分操作日志沒(méi)有寫(xiě)入到HDFS,可能會(huì)丟數(shù)據(jù)。其次是Master單點(diǎn)失效的處理 。GFS中采用主從模式備份Master的系統(tǒng)元數(shù)據(jù),當(dāng)主Master失效時(shí),可以通過(guò)分布式選舉備機(jī)接替主Master繼續(xù)對(duì)外提供服務(wù),而由于Replication及主備切換本身有一定的復(fù)雜性,HDFS Master的持久化數(shù)據(jù)只寫(xiě)入到本機(jī)(可能寫(xiě)入多份存放到Master機(jī)器的多個(gè)磁盤(pán)中防止某個(gè)磁盤(pán)損害),出現(xiàn)故障時(shí)需要人工介入。另外一點(diǎn)是對(duì)快照的支持 。GFS通過(guò)內(nèi)部采用copy-on-write的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)集群快照功能,而HDFS不提供快照功能。在大規(guī)模分布式系統(tǒng)中,程序有bug是很正常的情況,雖然大多數(shù)情況下可以修復(fù)bug,不過(guò)很難通過(guò)補(bǔ)償操作將系統(tǒng)數(shù)據(jù)恢復(fù)到一致的狀態(tài),往往需要底層系統(tǒng)提供快照功能,將系統(tǒng)恢復(fù)到最近的某個(gè)一致?tīng)顟B(tài)??傊琀DFS基本可以認(rèn)為是GFS的簡(jiǎn)化版,由于時(shí)間及應(yīng)用場(chǎng)景等各方面的原因?qū)FS的功能做了一定的簡(jiǎn)化,大大降低了復(fù)雜度。

    以上就是關(guān)于hdfs快照原理相關(guān)問(wèn)題的回答。希望能幫到你,如有更多相關(guān)問(wèn)題,您也可以聯(lián)系我們的客服進(jìn)行咨詢(xún),客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。


    推薦閱讀:

    抖音橫屏版HD(抖音橫屏版app)

    十九歲韓國(guó)HD免費(fèi)完整版(十七歲HD免費(fèi)完整)

    什么叫HD(什么叫hdr模式攝影)

    出擊排行榜(最強(qiáng)出擊)

    電商平臺(tái)logo圖片(電商平臺(tái)圖片素材)