-
當前位置:首頁 > 創(chuàng)意學(xué)院 > 技術(shù) > 專題列表 > 正文
hdfs快照原理(hadoop快照)
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于hdfs快照原理的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。
開始之前先推薦一個非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準,寫出的就越詳細,有微信小程序端、在線網(wǎng)頁版、PC客戶端
官網(wǎng):https://ai.de1919.com。
創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務(wù)客戶遍布全球各地,如需了解SEO相關(guān)業(yè)務(wù)請撥打電話175-8598-2043,或添加微信:1454722008
本文目錄:
一、HDFS讀寫和冷備份原理
當用戶通過命令行或者JavaAPI向Hadoop集群發(fā)起寫入文件操作時,將觸發(fā)寫文件流程,分為3個階段:創(chuàng)建文件,建立數(shù)據(jù)流管道和寫數(shù)據(jù)。
數(shù)據(jù)傳輸過程中,如果datanode2突然掛掉了,HDFS會啟動如下步驟進行容錯。
namenode負責HDFS集群的元數(shù)據(jù)管理,要保證快速檢索,namenode必須將數(shù)據(jù)放到內(nèi)存中,但一旦斷電或者故障,元數(shù)據(jù)會全部丟失,因此還必須在磁盤上做持久化。HDFS集群做元數(shù)據(jù)持久化的方式是edits.log+FSImage。edits.log存儲近期的操作,F(xiàn)SImage存儲以前的操作,這樣是為了盡可能地保障namenode的啟動速度。
二、Hadoop文檔(2.9.2) - HDFS架構(gòu)
Hadoop分布式文件系統(tǒng)(HDFS)是一種運行在通用硬件上的分布式文件系統(tǒng)。它與傳統(tǒng)的分布式文件系統(tǒng)有很多相似之處,但是也有顯著的不同。HDFS是高容錯的,可以部署在低成本硬件上。HDFS提供了對應(yīng)用數(shù)據(jù)的高吞吐量訪問,適用于具有大數(shù)據(jù)集的應(yīng)用。HDFS為了流數(shù)據(jù)訪問放松了一些POSIX的限制。
HDFS是主從結(jié)構(gòu)。一個HDFS集群由一個NameNode和一組DataNode組成。NameNode是主服務(wù)器,負責管理文件系統(tǒng)命名空間以及客戶端對文件的訪問。DataNode通常每個節(jié)點一個,負責管理存儲。HDFS對外暴露了一個文件系統(tǒng)命名空間并允許用戶數(shù)據(jù)作為文件存儲。在內(nèi)部實現(xiàn)上,一個文件會被分割成一個或多個block,這些block存儲在一組DataNode上。NameNode負責執(zhí)行文件系統(tǒng)命名空間操作,例如打開,關(guān)閉,重命名文件和目錄等。此外NameNode還維護著block和DataNode之間的映射關(guān)系。DataNode負責處理來自客戶端的讀寫請求,并根據(jù)NameNode的指令創(chuàng)建,刪除,備份block。
NameNode和DataNode都是運行在通用機器上的軟件。這些機器通常使用Linux系統(tǒng)。HDFS使用Java構(gòu)建,任何支持Java的機器都可以運行NameNode和DataNode。一種典型的集群部署方式是使用一臺機器運行NameNode,其它機器每臺運行一個DataNode實例。
HDFS使用傳統(tǒng)的分層文件結(jié)構(gòu)。用戶可以創(chuàng)建目錄并在目錄下存儲文件。文件系統(tǒng)命名空間結(jié)構(gòu)與傳統(tǒng)文件系統(tǒng)類似,用戶可以創(chuàng)建,刪除文件,將文件從一個目錄移動到另一個目錄,重命名文件。HDFS支持用戶限額和訪問權(quán)限。
NameNode維護整個文件系統(tǒng)命名空間,它會記錄任何對命名空間的修改。應(yīng)用程序可以指定HDFS中文件的備份數(shù)量。文件的拷貝數(shù)稱為該文件的備份因子。這個信息也存儲在NameNode中。
HDFS可以跨機器存儲海量文件。每個文件分成一個block的序列存儲。為了容錯,文件的block會被備份。每個文件的block大小和備份因子都是可配置的。
文件中所有block的大小是相等的(除了最后一個),而對append和hsync提供可變長block支持后,用戶可以直接創(chuàng)建一個新block,不必繼續(xù)填充最后一個block。
應(yīng)用程序可以指定文件的備份數(shù)。備份因子可在文件創(chuàng)建時指定,也可以稍后修改。HDFS的文件都是一次寫入的(除了append和truncate),并且任何時候都只有一個寫入器。
NameNode決定如何備份block。它周期性的接收來自DataNode的心跳檢測和block報表。收到心跳檢測說明DataNode工作正常,block報表包含該DataNode上的所有block。
備份文件的位置對HDFS的可用性和性能至關(guān)重要。對備份的優(yōu)化讓HDFS從眾多分布式系統(tǒng)中脫穎而出。這個工作需要大量的優(yōu)化和經(jīng)驗。機架感知備份放置策略的目的是提高數(shù)據(jù)的可靠性,可用性和網(wǎng)絡(luò)帶寬利用率。目前的備份放置策略實現(xiàn)是這個方向上的第一步。短期目標是在生產(chǎn)環(huán)境上對其進行驗證,更多的了解它的行為,為測試和研究更復(fù)雜的策略奠定基礎(chǔ)。
大型HDFS集群的機器通常隸屬于多個機架。兩個不同機架上的節(jié)點進行通信必須通過交換機。一般來說,同一機架機器之間的網(wǎng)絡(luò)帶寬要優(yōu)于不同機架機器間的網(wǎng)絡(luò)帶寬。
NameNode通過Hadoop Rack Awareness進程確定每個DataNode所屬的機架ID。一個簡單但是并非最優(yōu)的策略是將備份放置在獨立的機架上。這種策略可以避免機架故障時丟失數(shù)據(jù),讀數(shù)據(jù)時也可以利用多個機架的網(wǎng)絡(luò)帶寬。這種策略在集群中平均分配備份文件,這樣組件發(fā)生故障時可以平衡負載。但是這種策略會增加寫入成本,因為數(shù)據(jù)需要跨機架傳輸。
最常見的情況,備份因子是3。HDFS的放置策略是:如果寫入器位于DataNode上,則將副本放置在本地計算機,否則隨機選擇一個DataNode,另一個副本放置在另一個遠程機架的節(jié)點上,最后一個副本放在同一個遠程機架的另一個節(jié)點上。這種策略減少了機架間的寫入流量,從而提高寫性能。機架發(fā)生故障的幾率遠小于節(jié)點故障幾率。這種策略并不影響數(shù)據(jù)可靠性和可用性,但是它確實減少了讀操作時的聚合網(wǎng)絡(luò)帶寬,因為一個block被放置到兩個機架上而不是三個。這種策略的文件副本并不是均勻的分布在所有機架上,副本的三分之一位于一個節(jié)點,剩下的三分之二位于另一個機架上。這種策略可以提高寫性能,而不會影響數(shù)據(jù)可靠性和讀性能。
如果備份因子大于3,那么第四個和之后的副本隨機放置,同時要保證副本數(shù)量不能超過機架的上限(公式: (replicas - 1) / racks + 2 )。
由于DataNode不能放置同一個block的多個副本,所以最大備份因子就是最大DataNode數(shù)。
在提供了存儲類型和存儲策略的支持之后,除了機架感知,NameNode放置副本時也會考慮放置策略。NameNode首先根據(jù)機架感知選擇節(jié)點,然后根據(jù)備份文件的放置策略檢查該節(jié)點的存儲類型,如果該候選節(jié)點沒有要求的存儲類型,NameNode會查找下一個節(jié)點。如果第一輪沒有找到足夠的節(jié)點放置備份,NameNode會使用后備存儲類型開始第二輪查找。
目前,副本放置策略依然在開發(fā)中。
為了減少帶寬消耗和讀延遲,HDFS會嘗試找尋一個離讀請求最近的副本。如果讀請求節(jié)點所在機架有這樣一個副本,HDFS就優(yōu)先使用這個副本。如果HDFS集群跨越多個數(shù)據(jù)中心,則本地數(shù)據(jù)中心的副本優(yōu)先于遠程副本。
啟動HDFS時,NameNode會進入一種稱為安全模式的特殊狀態(tài)。安全模式下數(shù)據(jù)block無法備份。NameNode會從DataNode接收心跳檢測和block報表。block報表包含該DataNode下所有數(shù)據(jù)block的列表信息。每個block都有一個指定的最小備份數(shù)。只有block的最小備份數(shù)登記到NameNode中后,block才可以備份。備份登記結(jié)束后,NameNode退出安全模式。這是如果還有block不滿足最小備份數(shù)的條件,NameNode才開始備份這些block。
HDFS命名空間由NameNode保存,NameNode使用一個稱為EditLog的事務(wù)日志記錄對文件系統(tǒng)元數(shù)據(jù)的所有更改。例如,創(chuàng)建一個新文件會在EditLog中插入一條對應(yīng)記錄,同樣的,修改文件備份因子也會插入一條記錄。NameNode使用本地文件存儲EditLog。整個文件系統(tǒng)命名空間,包括文件與block之間的映射關(guān)系,文件系統(tǒng)數(shù)據(jù)等,都保存在FsImage文件中。
NameNode在內(nèi)存中維護文件系統(tǒng)命名空間和文件block映射關(guān)系的鏡像。當NameNode啟動,或者某個閾值觸發(fā)了檢查點時,NameNode從磁盤上讀取FsImage和EditLog的內(nèi)容,將所有EditLog中的事務(wù)操作應(yīng)用到FsImage的內(nèi)存鏡像中,然后在磁盤上生成一個全新的FsImage。之后可以截斷EditLog,因為所有事務(wù)都已持久化到FsImage。這個過程稱為檢查點。檢查點的目的是通過獲取文件系統(tǒng)元數(shù)據(jù)的快照并保存到FsImage來保證HDFS文件系統(tǒng)元數(shù)據(jù)的一致性。讀取FsImage可能很快,但是持續(xù)編輯FsImage就不同了。因此我們將操作記錄到EditLog中,而不是直接修改FsImage。在檢查點期間,所有EditLog操作應(yīng)用到FsImage。檢查點可以按周期觸發(fā)( dfs.namenode.checkpoint.period ),也可以按事務(wù)數(shù)觸發(fā)( dfs.namenode.checkpoint.txns )。如果兩個屬性都設(shè)置了,第一個滿足的閾值會觸發(fā)檢查點。
DataNode在本地文件系統(tǒng)中存儲HDFS數(shù)據(jù)。DataNode對HDFS文件一無所知,它以block為單位存儲HDFS數(shù)據(jù)。DataNode不會在同一個目錄下保存所有文件。相反,它使用啟發(fā)式方法來確定每個目錄的最佳文件數(shù),并適時創(chuàng)建子目錄。在同一個目錄下創(chuàng)建所有文件并不是最佳選擇,因為本地文件系統(tǒng)可能無法支持一個目錄下的大量文件。DataNode啟動時,它會掃描整個本地文件系統(tǒng),生成一個本地文件與數(shù)據(jù)block之間的關(guān)系列表,將其發(fā)送給NameNode,這個列表稱為block報告。
所有HDFS通信協(xié)議都構(gòu)建在TCP/IP協(xié)議之上。客戶端通過TCP端口與NameNode建立連接,它使用ClientProtocol與NameNode交互。DataNode使用DataProtocol與NameNode交互。一個RPC抽象封裝了客戶端協(xié)議和DataNode協(xié)議。NameNode從不初始化任何RPC,它只是響應(yīng)來自的客戶端和DataNode的請求。
HDFS的主要目標是即使出現(xiàn)故障也可以可靠的存儲數(shù)據(jù)。三種常見的故障分別是:NameNode故障,DataNode故障和網(wǎng)絡(luò)分區(qū)。
DataNode周期性的發(fā)送心跳檢測給NameNode。網(wǎng)絡(luò)分區(qū)可能導(dǎo)致某些DataNode無法連接NameNode。NameNode無法收到DataNode的心跳檢測后,它會把這樣的DataNode標記為dead,并不在發(fā)送新的I/O請求。注冊到死亡DataNode上的數(shù)據(jù)對HDFS來說不再可用,也會導(dǎo)致某些block的備份數(shù)少于文件指定的最小備份數(shù)。NameNode持續(xù)追蹤block的備份情況并在必要時初始化備份操作。重備份的原因是多種多樣的:DataNode不可用,某個備份文件損壞,DataNode磁盤故障,或者文件的備份因子增大。
為了避免DataNode狀態(tài)抖動引起的備份風暴,標記DataNode死亡的超時時間設(shè)置的很長(默認超過10分鐘)。用戶可以設(shè)置一個更短的時間將DataNode標記為陳舊(stale),這樣可以避免對性能敏感的工作負載的陳舊DataNode的讀寫操作。
HDFS架構(gòu)與數(shù)據(jù)重平衡scheme兼容。scheme可以在DataNode的磁盤空間低于某個閾值時將數(shù)據(jù)移動到另一個DataNode上。如果對某個文件的需求特別高,scheme還可以動態(tài)創(chuàng)建額外的副本并平衡到整個集群中。這些數(shù)據(jù)平衡scheme還未實現(xiàn)。
從DataNode中讀取的block可能是損壞的。損壞的原因有多種:磁盤故障,網(wǎng)絡(luò)故障,或者軟件問題。HDFS客戶端會對文件內(nèi)容進行校驗和檢查。當客戶端創(chuàng)建一個HDFS文件時,它會計算出文件所有block的校驗和并保存在同一個命名空間的一個獨立的隱藏文件中。當客戶單檢索文件時還要檢查對應(yīng)校驗和文件中的值。如果校驗和不匹配,客戶端會嘗試該block其它節(jié)點上的副本。
FsImage和EditLog是HDFS的核心數(shù)據(jù)結(jié)構(gòu)。如果它們發(fā)生損壞,HDFS就無法使用了。因此,可以通過配置讓NameNode維護多個FsImage和EditLog的拷貝。對兩個文件的修改會同步到所有拷貝中。這種同步操作會降低NameNode的TPS,但是這種犧牲是可接受的,因為HDFS是數(shù)據(jù)密集,不是元數(shù)據(jù)密集。NameNode重啟時,它會選擇最一致的FsImage和EditLog使用。
另一種減低故障的辦法是使用HA。
(略)
HDFS的目的是支持大型文件。HDFS支持一次寫入多次讀取。一個典型的block大小是128MB。因此,HDFS文件按照128MB的大小分割,每個block可能分布在不同的節(jié)點上。
客戶端向HDFS文件寫入數(shù)據(jù)時,如果備份因子是三,NameNode使用備份目標選擇算法檢索出一組DataNode。這個列表是可以存儲副本的DataNode??蛻舳讼认虻谝粋€DataNode寫入數(shù)據(jù),DataNode接收數(shù)據(jù)并將數(shù)據(jù)傳輸?shù)搅斜碇械牡诙€DataNode。第二個DataNode開始接收數(shù)據(jù)并繼續(xù)傳輸數(shù)據(jù)到第三個DataNode。這樣,數(shù)據(jù)通過管道從一個DataNode傳輸?shù)较乱粋€。
(略)
如果開啟了trash配置,從FS shell中刪除的文件并不會立刻從HDFS中刪除,HDFS將它移動到一個trash目錄(每個用戶都有自己的trash目錄, /user/<username>/.Trash )。只要文件還在trash目錄中就可以快速恢復(fù)。
最近刪除的文件移動到 /user/<username>/.Trash/Current 目錄中,每隔一段時間,HDFS會為這些文件創(chuàng)建檢查點文件( /user/<username>/.Trash/<date> )并刪除舊檢查點文件。
如果trash中的文件過期了,NameNode將這些文件從命名空間中刪除。與文件關(guān)聯(lián)的block被釋放。刪除文件和空間釋放之間可能會有延遲。
下面是一個例子,首先創(chuàng)建兩個文件:
然后刪除test1,該文件會被移到Trash目錄:
接著跳過Trash刪除test2:
現(xiàn)在可以查看Trash目錄:
文件的備份因子降低后,NameNode選擇可以刪除的副本,在下次心跳檢測時把信息發(fā)送給DataNode,之后DataNode刪除block并釋放空間。
三、HDFS詳解
認識HDFS
HDFS的特點:
HDFS不適用的場景
HDFS的組成
HDFS的數(shù)據(jù)復(fù)制
HDFS復(fù)制的選擇
HDFS的安全模式
HDFS的元數(shù)據(jù)持久化
HDFS架構(gòu)
數(shù)據(jù)塊
為什么HDFS默認的Block為128MB(64MB)?
分布式文件系統(tǒng)中的塊進行抽象帶來的好處:
NameNode
NameNode主要功能如下:
DataNode
SecondaryNameNode
SecondaryNameNode合并Fsimage和EditsLog文件過程如下:
CheckPoint過程如下:
SecondaryNameNode會周期性地將EditsLog文件進行合并,合并前提條件如下:
機架感知
HDFS的RPC機制
RPC的實現(xiàn)流程
RPC的實體模型
HDFS的文件讀取
文件讀取的流程如下:
HDFS的文件寫入
寫入文件的過程比讀取復(fù)雜,步驟如下:
HDFS的HA(High Availability,高可用性)機制
HA架構(gòu)解釋如下:
HDFS的federation機制
HDFS Federation使用了多個獨立的NameNode/NameSpace使得HDFS的命名服務(wù)能夠水平擴展
HDFS Federation中的NameNode之間是聯(lián)盟關(guān)系,它們之間相互獨立且不需要相互協(xié)調(diào)。HDFS Federation中的NameNode提供了名字空間和塊關(guān)聯(lián)功能.HDFS Federation中的DataNode被所有的NameNode用作公共存儲塊的地方.每一個DataNode都會向所在集群中所有的NameNode注冊,并周期性的發(fā)送心跳和塊信息報告,同時處理來自NameNode的指令
在HDFS中,所有的更新、回滾都是以NameNode和BlockPool為單元發(fā)生的.即同HDFS Federation中不同的NameNode/BlockPool之間沒有什么關(guān)系
多個名字空間的管理問題
HDFS Federation中名字空間管理的基本原理:
維護HDFS
追加數(shù)據(jù)
并行復(fù)制
升級與回滾
兩種升級升級都簡單分為以下幾步:
添加節(jié)點
刪除節(jié)點
HDFS權(quán)限管理
四、HDFS中的塊與普通文件系統(tǒng)的塊有什么區(qū)別?
分布式文件系統(tǒng)很多,包括GFS,HDFS,HDFS基本可以認為是GFS的一個簡化版實現(xiàn),二者因此有很多相似之處。首先,GFS和HDFS都采用單一主控機+多臺工作機的模式,由一臺主控機(Master)存儲系統(tǒng)全部元數(shù)據(jù),并實現(xiàn)數(shù)據(jù)的分布、復(fù)制、備份決策,主控機還實現(xiàn)了元數(shù)據(jù)的checkpoint和操作日志記錄及回放功能。工作機存儲數(shù)據(jù),并根據(jù)主控機的指令進行數(shù)據(jù)存儲、數(shù)據(jù)遷移和數(shù)據(jù)計算等。其次,GFS和HDFS都通過數(shù)據(jù)分塊和復(fù)制(多副本,一般是3)來提供更高的可靠性和更高的性能。當其中一個副本不可用時,系統(tǒng)都提供副本自動復(fù)制功能。同時,針對數(shù)據(jù)讀多于寫的特點,讀服務(wù)被分配到多個副本所在機器,提供了系統(tǒng)的整體性能。最后,GFS和HDFS都提供了一個樹結(jié)構(gòu)的文件系統(tǒng),實現(xiàn)了類似與Linux下的文件復(fù)制、改名、移動、創(chuàng)建、刪除操作以及簡單的權(quán)限管理等。然而,GFS和HDFS在關(guān)鍵點的設(shè)計上差異很大,HDFS為了規(guī)避GFS的復(fù)雜度進行了很多簡化。首先,GFS最為復(fù)雜的部分是對多客戶端并發(fā)追加同一個文件,即多客戶端并發(fā)Append模型 。GFS允許文件被多次或者多個客戶端同時打開以追加數(shù)據(jù),以記錄為單位。假設(shè)GFS追加記錄的大小為16KB ~ 16MB之間,平均大小為1MB,如果每次追加都訪問GFS Master顯然很低效,因此,GFS通過Lease機制將每個Chunk的寫權(quán)限授權(quán)給Chunk Server。寫Lease的含義是Chunk Server對某個Chunk在Lease有效期內(nèi)(假設(shè)為12s)有寫權(quán)限,擁有Lease的Chunk Server稱為Primary Chunk Server,如果Primary Chunk Server宕機,Lease有效期過后Chunk的寫Lease可以分配給其它Chunk Server。多客戶端并發(fā)追加同一個文件導(dǎo)致Chunk Server需要對記錄進行定序,客戶端的寫操作失敗后可能重試,從而產(chǎn)生重復(fù)記錄,再加上客戶端API為異步模型,又產(chǎn)生了記錄亂序問題。Append模型下重復(fù)記錄、亂序等問題加上Lease機制,尤其是同一個Chunk的Lease可能在Chunk Server之間遷移,極大地提高了系統(tǒng)設(shè)計和一致性模型的復(fù)雜度。而在HDFS中,HDFS文件只允許一次打開并追加數(shù)據(jù),客戶端先把所有數(shù)據(jù)寫入本地的臨時文件中,等到數(shù)據(jù)量達到一個Chunk的大?。ㄍǔ?4MB),請求HDFS Master分配工作機及Chunk編號,將一個Chunk的數(shù)據(jù)一次性寫入HDFS文件。由于累積64MB數(shù)據(jù)才進行實際寫HDFS系統(tǒng),對HDFS Master造成的壓力不大,不需要類似GFS中的將寫Lease授權(quán)給工作機的機制,且沒有了重復(fù)記錄和亂序的問題,大大地簡化了系統(tǒng)的設(shè)計。然而,我們必須知道,HDFS由于不支持Append模型帶來的很多問題,構(gòu)建于HDFS之上的Hypertable和HBase需要使用HDFS存放表格系統(tǒng)的操作日志,由于HDFS的客戶端需要攢到64MB數(shù)據(jù)才一次性寫入到HDFS中,Hypertable和HBase中的表格服務(wù)節(jié)點(對應(yīng)于Bigtable中的Tablet Server)如果宕機,部分操作日志沒有寫入到HDFS,可能會丟數(shù)據(jù)。其次是Master單點失效的處理 。GFS中采用主從模式備份Master的系統(tǒng)元數(shù)據(jù),當主Master失效時,可以通過分布式選舉備機接替主Master繼續(xù)對外提供服務(wù),而由于Replication及主備切換本身有一定的復(fù)雜性,HDFS Master的持久化數(shù)據(jù)只寫入到本機(可能寫入多份存放到Master機器的多個磁盤中防止某個磁盤損害),出現(xiàn)故障時需要人工介入。另外一點是對快照的支持 。GFS通過內(nèi)部采用copy-on-write的數(shù)據(jù)結(jié)構(gòu)實現(xiàn)集群快照功能,而HDFS不提供快照功能。在大規(guī)模分布式系統(tǒng)中,程序有bug是很正常的情況,雖然大多數(shù)情況下可以修復(fù)bug,不過很難通過補償操作將系統(tǒng)數(shù)據(jù)恢復(fù)到一致的狀態(tài),往往需要底層系統(tǒng)提供快照功能,將系統(tǒng)恢復(fù)到最近的某個一致狀態(tài)??傊?,HDFS基本可以認為是GFS的簡化版,由于時間及應(yīng)用場景等各方面的原因?qū)FS的功能做了一定的簡化,大大降低了復(fù)雜度。
以上就是關(guān)于hdfs快照原理相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進行咨詢,客服也會為您講解更多精彩的知識和內(nèi)容。
推薦閱讀: