版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
Hadoop大數(shù)據(jù)處理實戰(zhàn)第4章Hadoop分布式文件系統(tǒng)本章導讀Hadoop分布式文件系統(tǒng)(HDFS)是Hadoop體系中數(shù)據(jù)存儲管理的基礎。它是一個高度容錯的系統(tǒng),能檢測和應對硬件故障,可在低成本的通用硬件上運行。它簡化了文件的一致性模型,通過流式數(shù)據(jù)訪問,可為帶有大型數(shù)據(jù)集的應用程序提供高效的海量數(shù)據(jù)存儲服務。學習目標020304了解HDFS的設計目標和不足。熟悉HDFS的體系結構。了解HDFS的數(shù)據(jù)錯誤與恢復手段。理解HDFS的運行機制和工作流程。掌握HDFS的命令行操作和JavaAPI操作。01HDFS概述數(shù)據(jù)錯誤與恢復02HDFS的運行機制03目錄CONTENTSHDFS的工作流程04HDFS的基本操作0501HDFS概述HDFS概述HDFS是一個支持海量數(shù)據(jù)存儲的分布式文件系統(tǒng),它允許用戶將成百上千的計算機組成存儲集群,并將這些計算機劃分成元數(shù)據(jù)節(jié)點和數(shù)據(jù)節(jié)點。集群中各節(jié)點之間通過網(wǎng)絡進行數(shù)據(jù)交互,從而形成一個跨網(wǎng)絡的文件系統(tǒng)。網(wǎng)絡編程的復雜性和網(wǎng)絡傳輸?shù)牟豢煽啃?,使得HDFS比普通磁盤文件系統(tǒng)更加復雜。HDFS概述4.1.1HDFS的設計目標和不足HDFS的設計目標包括以下幾點:1.HDFS的設計目標(1)支持超大文件存儲。HDFS能夠存儲GB級乃至TB級的超大文件,如今已存在支持PB級文件存儲的Hadoop集群。(2)采用write-once-read-many(一次寫入多次讀?。┰L問模型。HDFS對數(shù)據(jù)文件采取一次性寫入、多次讀取的方式,即HDFS文件一經(jīng)創(chuàng)建、寫入和關閉之后就不能再修改。需要注意的是,HDFS在同一時刻僅支持一個“寫入者”。此外,隨著Hadoop版本的升級,HDFS的寫操作已支持使用append方式在文件末尾追加數(shù)據(jù)。HDFS概述(3)具有故障檢測和快速自動恢復功能。HDFS系統(tǒng)包含了成百上千個存儲節(jié)點,并且這些節(jié)點都是一些廉價的計算機。顯然,對于如此多的計算機而言,個別計算機出現(xiàn)硬件故障實屬正常。有鑒于此,故障檢測和快速自動恢復就成為HDFS的核心設計目標,從而既保證了集群的容錯性,又保證了數(shù)據(jù)的完整性。(4)采用流式數(shù)據(jù)訪問。為了獲得高吞吐量的數(shù)據(jù)訪問,HDFS上的應用主要采用流式數(shù)據(jù)訪問方式,即邊收集數(shù)據(jù)邊處理數(shù)據(jù)。因此,HDFS適用于批量數(shù)據(jù)處理,而非用戶交互式數(shù)據(jù)處理。(5)支持移動計算。如果將應用程序請求的計算在其操作的數(shù)據(jù)附近執(zhí)行,而不是將數(shù)據(jù)移動到運行應用程序的位置,可以極大地減少網(wǎng)絡擁塞并提高系統(tǒng)的整體吞吐量,從而提高計算效率,尤其是當數(shù)據(jù)文件很大時提升效果更加明顯。此外,HDFS還為應用程序提供了移動計算的接口。HDFS概述HDFS同時也存在以下幾點不足:2.HDFS的不足(1)不適合處理低延遲數(shù)據(jù)訪問。HDFS主要用于海量數(shù)據(jù)的批量處理,且通過采用流式數(shù)據(jù)訪問方式獲得了數(shù)據(jù)的高吞吐率,但這意味著HDFS不適合處理低延遲的數(shù)據(jù)訪問請求。(2)無法高效存儲大量小文件。小文件是指小于HDFS上最小存儲單位的文件。如果HDFS中存儲大量的小文件,會使得在集群中進行數(shù)據(jù)計算時出現(xiàn)數(shù)據(jù)傾斜問題(即數(shù)據(jù)在計算時分散度不夠,導致大量的數(shù)據(jù)集中到一臺或多臺計算機上,使得這些計算機的計算速度遠遠低于平均計算速度,計算過程也將變得緩慢)。不過,可以通過合并小文件來解決此類問題。HDFS概述(3)不支持多用戶寫入和任意修改文件。HDFS采用了“一次寫入多次讀取”模式,也就是說,用戶不能對HDFS上的數(shù)據(jù)進行隨機寫操作。此外,HDFS不支持多個“寫入者”同時操作數(shù)據(jù),也不支持在文件的任意位置進行寫操作以修改文件內容。如果必須修改HDFS文件,用戶可以將該文件下載到本地,重新編輯后再上傳到HDFS中。HDFS概述4.1.2HDFS的體系結構HDFS的核心組件是NameNode和DataNode。它是一個主/從(master/slave)架構的系統(tǒng),即一個HDFS集群由一個NameNode和若干DataNode組成。其中,NameNode(元數(shù)據(jù)節(jié)點)為主節(jié)點,DataNode(數(shù)據(jù)節(jié)點)為從節(jié)點。HDFS的體系結構HDFS概述1.block在計算機中,每個物理磁盤都包含大量磁盤數(shù)據(jù)塊。磁盤數(shù)據(jù)塊是磁盤讀寫的最小單位,并且當文件系統(tǒng)進行文件讀寫時只能操作整數(shù)倍磁盤數(shù)據(jù)塊大小的數(shù)據(jù)。與普通文件系統(tǒng)類似,HDFS也采用了塊(block)的概念。HDFS的數(shù)據(jù)塊大小默認為128MB(Hadoop1.x為64MB),顯然,這比大小通常為512B的磁盤數(shù)據(jù)塊要大得多。HDFS概述在HDFS中,數(shù)據(jù)文件按塊進行存儲可以帶來如下好處:(1)可以存儲任意大小的數(shù)據(jù)文件,不用再受單個節(jié)點磁盤容量大小的限制。例如,在單個節(jié)點存儲100TB甚至10PB的文件幾乎是不可能的,但HDFS采用物理切塊的設計,可以將這些文件數(shù)據(jù)切分成多個block,分別存儲在集群中的各個節(jié)點上。(2)簡化了文件存儲子系統(tǒng)的設計,尤其是簡化了存儲系統(tǒng)的管理,它將元數(shù)據(jù)信息和文件數(shù)據(jù)信息分開存儲。(3)有利于實現(xiàn)分布式文件系統(tǒng)的容錯性。在HDFS中,一個數(shù)據(jù)文件可能被切分成多個block,存儲在不同的DataNode上,并且block在集群中保存了多個副本。當操作HDFS數(shù)據(jù)時,如果出現(xiàn)節(jié)點故障,就可以從其他節(jié)點上讀取副本。HDFS概述(4)有利于實現(xiàn)負載均衡并提高集群可靠性。如果某個DataNode上的剩余空間低于特定的臨界點,按照均衡策略,系統(tǒng)會自動地將數(shù)據(jù)從這個DataNode移動到其他空閑的DataNode上。此外,由于HDFS中的block副本被分布在不同的機架上,即使丟失某個機架,也不會影響集群的正常運行,這就大大提高了集群的可靠性。與此同時,Hadoop的故障檢測和快速自動恢復功能會及時將block副本數(shù)量恢復到正常水平。HDFS概述2.NameNode和SecondaryNameNode(1)NameNode。NameNode管理著HDFS文件系統(tǒng)的命名空間(namespace),其實就是HDFS的目錄結構。用戶可以利用HDFS命令或者在客戶端通過操作請求,來創(chuàng)建、刪除、移動和重命名HDFS文件。NameNode上存儲的元數(shù)據(jù)信息包括:①文件名、目錄名及其層級關系;②文件目錄的所有者及其權限;③每個文件由哪些數(shù)據(jù)塊組成;④數(shù)據(jù)塊到DataNode的映射信息,如數(shù)據(jù)塊存放在哪些DataNode上、每個DataNode上保存了哪些數(shù)據(jù)塊等。HDFS概述元數(shù)據(jù)信息可被持久化到本地磁盤的兩個文件中,分別是fsimage(元數(shù)據(jù)鏡像文件)和edits(事務日志文件)。fsimage存儲著文件系統(tǒng)的所有命名空間信息(如文件系統(tǒng)所有目錄、文件信息及數(shù)據(jù)塊的索引等);edits存儲著HDFS數(shù)據(jù)的事務操作日志(如創(chuàng)建一個HDFS文件、修改HDFS文件的副本系數(shù)等操作記錄)。在啟動NameNode時,它首先會將fsimage加載到內存中,在系統(tǒng)運行期間,所有對NameNode的操作也都保存在內存中,同時為了防止數(shù)據(jù)丟失,這些操作又會不斷被持久化到本地edits文件中。NameNode處于正常運行狀態(tài)時,HDFS的所有更新操作都被寫入edits文件。如果直接寫入fsimage文件(一般都很大),會使系統(tǒng)的運行速度變慢。隨著HDFS的更新操作不斷執(zhí)行,edits文件也會變得越來越大。雖然edits的文件大小對系統(tǒng)不會有明顯影響,但是NameNode節(jié)點的重啟過程將會變得非常緩慢。HDFS概述(2)SecondaryNameNode。SecondaryNameNode(NameNode的輔助者)可以解決edits文件過大的問題,縮短NameNode的重啟時間,它主要用于對fsimage和edits進行定期合并。由于合并過程中需要消耗內存,因此,系統(tǒng)通常將SecondaryNameNode和NameNode放在不同的節(jié)點上。SecondaryNameNode實際上是通過在文件系統(tǒng)中設置一個檢查點(checkpoint)來幫助NameNode管理元數(shù)據(jù),從而使NameNode能夠快速、高效地工作。但是,它并非第二個NameNode,僅是NameNode的一個輔助工具。SecondaryNameNode不僅提升了集群性能,還保存了NameNode的元數(shù)據(jù)信息,這在一定程度上提高了元數(shù)據(jù)的安全性和可靠性。HDFS概述3.DataNodeDataNode上存儲著HDFS文件的真實數(shù)據(jù),且一個DataNode可以存儲多個block。每個block會在多個DataNode上存儲副本,但每個DataNode上只存儲一個block副本。DataNode負責為客戶端或NameNode提供數(shù)據(jù)的檢索和讀寫服務,并通過“心跳”(Heartbeats)定期向NameNode發(fā)送自己的block列表信息。一般情況下,DataNode從磁盤讀取數(shù)據(jù)塊。但對于頻繁訪問的block,系統(tǒng)會將其緩存在DataNode的內存中。HDFS概述向Hadoop集群中增加新的DataNode節(jié)點時,會導致HDFS文件分布不均衡。此外,隨著HDFS不斷地運行,也會出現(xiàn)HDFS文件分布不均衡的情況,這樣一來,集群就不能充分利用系統(tǒng)資源了。均衡器作為Hadoop的守護進程,可以將block副本從高負載的DataNode移動到使用率較低的DataNode(即在遵循block的副本機制的前提下,重新調整block的分布),以達到集群均衡的目的。注意,這里的均衡是一個相對均衡,即每個DataNode節(jié)點的磁盤使用率和整個集群的資源使用率均小于指定的閾值。在集群中啟用均衡器
(balancer)HDFS概述在集群主節(jié)點的“/opt/programs/hadoop-2.7.6/sbin”目錄下,存在一個balancer可執(zhí)行文件“start-balancer.sh”,通過執(zhí)行以下命令可以運行balancer程序(用戶可以隨時通過執(zhí)行“stop-balancer.sh”命令停止均衡):#start-balancer.sh-threshold8其中,“-threshold8”參數(shù)用于設定集群的均衡閾值為8%,其默認值為10%。此外,由于balancer進程運行于集群的后臺,所以并不會增加集群的運行負擔。在配置文件hdfs-site.xml中,還可以設置在DataNode之間轉移block時占用的資源帶寬大小,即設置dfs.balance.bandwidthPerSec參數(shù)(默認值為1MB)。02數(shù)據(jù)錯誤與恢復數(shù)據(jù)錯誤與恢復HDFS的主要目標是即使在出錯的情況下也要保證數(shù)據(jù)存儲的可靠性。常見的出錯情況包括block損壞、NameNode錯誤、DataNode錯誤等,HDFS提供了多種錯誤恢復手段。數(shù)據(jù)錯誤與恢復4.2.1block損壞處理網(wǎng)絡傳輸錯誤和機器硬件故障等因素會造成數(shù)據(jù)損壞??蛻舳嗽谧x取文件時會對每個讀取的block進行校驗,如果校驗出錯,客戶端就會請求讀取其他DataNode上的block副本,并向NameNode報告該block存在問題,然后NameNode會重新復制該block。每一個DataNode都會開啟一個塊掃描進程(DataBlockScanner),來定期驗證其存儲的block的正確性,并將驗證錯誤的block交給NameNode進行處理。數(shù)據(jù)錯誤與恢復4.2.2NameNode和DataNode錯誤處理NameNode上保存了元數(shù)據(jù)信息,如果NameNode節(jié)點損壞,HDFS中的所有文件都會丟失,并且用戶也不能根據(jù)DataNode上的block重新構建HDFS文件。因此,確保NameNode的容錯性是十分重要的。通常,可以采用以下3種方法來保證NameNode元數(shù)據(jù)信息的安全。
1將NameNode的元數(shù)據(jù)信息持久化到本地磁盤并同步到NFS上,但這種方法會因為網(wǎng)絡帶寬等原因而容易造成元數(shù)據(jù)丟失。數(shù)據(jù)錯誤與恢復
2在HDFS集群中運行一個SecondaryNameNode,當NameNode節(jié)點宕機時,可以利用SecondaryNameNode保存的元數(shù)據(jù)信息進行系統(tǒng)恢復。SecondaryNameNode備份的元數(shù)據(jù)信息總是滯后于NameNode,所以這種方法在NameNode節(jié)點失效后難免會丟失部分數(shù)據(jù)信息。
3在HDFS集群中啟動主(active)、備(standby)兩個NameNode。其中,standbyNameNode轉存了activeNameNode的元數(shù)據(jù)信息,并且這種方式是同步的。即使activeNameNode發(fā)生硬件故障,集群也能快速實現(xiàn)故障轉移。當DataNode節(jié)點發(fā)生硬件故障或者斷網(wǎng)時,該節(jié)點將無法接收到NameNode的數(shù)據(jù)處理請求,并且該節(jié)點的數(shù)據(jù)同時會被NameNode標記為不可讀。并且,DataNode節(jié)點錯誤可能會導致集群中的副本系數(shù)小于指定值。當NameNode周期性地檢查數(shù)據(jù)副本時,一旦發(fā)現(xiàn)這種情況,就會立即啟動復制操作。03HDFS的運行機制HDFS的運行機制HDFS的運行機制主要包括副本機制、心跳機制、副本放置與機架感知策略、Federation機制、HA機制、安全模式、垃圾回收等內容。HDFS的運行機制4.3.1副本機制為了保證集群的容錯性和可用性,HDFS采用了數(shù)據(jù)冗余存儲方式,即一個數(shù)據(jù)可以保存多個副本,并且這些副本會分別存儲在不同的DataNode上。block副本數(shù)是可以配置的,并且它既可以在創(chuàng)建文件時指定,也可以在創(chuàng)建文件后修改。DataNode按照NameNode的命令進行block的創(chuàng)建、復制和刪除等操作。HDFS數(shù)據(jù)冗余存儲示意圖HDFS的運行機制
…………
HDFS的數(shù)據(jù)冗余存儲方式具有多種優(yōu)勢。如果多個客戶端同時訪問同一個數(shù)據(jù)文件,就可以讓這些客戶端分別從不同的block副本讀取數(shù)據(jù),從而加快數(shù)據(jù)傳輸速度并提升數(shù)據(jù)的可靠性,有效避免因DataNode故障造成數(shù)據(jù)丟失的情況。由于集群中DataNode是通過網(wǎng)絡通信進行數(shù)據(jù)傳輸?shù)?,當進行block副本復制時,它還可以檢查數(shù)據(jù)傳輸時是否出現(xiàn)錯誤。HDFS的運行機制4.3.2心跳機制DataNode通過“心跳”(Heartbeats)將block信息報告給NameNode,這里的“心跳”是一種形象化描述,指的是不間斷地發(fā)送一個自定義結構體(“心跳包”或“心跳幀”)來證明自己節(jié)點的有效性。NameNode啟動后,會等待所有DataNode的“心跳”,而DataNode啟動后,會主動連接NameNode,并在一定間隔(默認為3s)主動向NameNode發(fā)送一個“心跳”,報告自己的狀態(tài)信息,然后NameNode通過這個“心跳”向DataNode下達命令。如果由于硬件故障或網(wǎng)絡問題,NameNode長時間未收到某個DataNode的“心跳”,NameNode將判定該DataNode為宕機,然后檢查該DataNode上的block副本數(shù)據(jù)并備份到其他的DataNode節(jié)點上。HDFS的運行機制4.3.3副本放置與機架感知策略一個集群中往往存在多個機架,且每個機架上又放置了多個DataNode,而每個DataNode上又保存了多個文件的block副本。另外,NameNode上的元數(shù)據(jù)存儲著每個DataNode所屬的機架ID。那么,如何分配文件的block副本到集群中的DataNode上呢?假設將HDFS文件的副本數(shù)量配置為3,那么每個block副本會被放置到3個不同的DataNode上。其中,有兩個block副本被放置到同一個機架的不同DataNode上,而第3個block副本被放置到另一個機架的DataNode上。block副本放置策略及復制過程HDFS的運行機制block副本的放置過程如下:如果客戶端發(fā)起寫操作請求,那么就在客戶端所在的節(jié)點上放置第1個副本(實現(xiàn)就近寫)。如果是來自集群外部的寫操作請求,就隨機選擇一個能夠滿足存儲要求且不忙的DataNode放置第1個副本。第2個副本是從機架1的DataNode1上復制到同一個機架的DataNode3上。在機架2上隨機選擇一個DataNode放置第3個副本。在本例中,第3個副本是從DataNode3上復制到DataNode6上。HDFS的運行機制相對于將副本均勻分布在機架中的策略,這種副本放置策略對集群性能有很大的提升。例如,它減少了機架間的數(shù)據(jù)傳輸;在不損害數(shù)據(jù)可靠性和讀取性能的情況下,它既兼顧了寫操作的效率,又充分利用了多個機架的帶寬,從而減少了讀取數(shù)據(jù)時所需要的網(wǎng)絡傳輸總帶寬。由于副本的存放位置會影響HDFS的可靠性和性能,HDFS采用了一種稱為機架感知(rack-aware)的策略來提高數(shù)據(jù)的可靠性,并提升網(wǎng)絡帶寬的利用率。這樣一來,即使一個機架發(fā)生故障,由于其他機架上的副本仍然是可用的,也不會影響到數(shù)據(jù)的可靠性。另外,當讀取數(shù)據(jù)時,應用程序可以在多個機架上同時進行讀取操作,這種并行處理方法也大大提高了數(shù)據(jù)的讀取速度。HDFS的運行機制4.3.4Federation機制對于一個存儲著大量文件的超大集群來說,NameNode的內存中需要保存每個文件的元數(shù)據(jù)信息,那么計算機的內存就成了NameNode的瓶頸。于是,在Hadoop2.x引入了HDFSFederation(聯(lián)邦)機制,它允許集群通過橫向擴展的方式解決NameNode的瓶頸問題,即增加NameNode的數(shù)量。在Federation機制中,每個NameNode分別管理文件系統(tǒng)命名空間的一部分(稱為命名空間卷)。各命名空間卷中分別存儲了命名空間的元數(shù)據(jù),以及在命名空間中的所有文件數(shù)據(jù)塊的塊池(blockpool)。同時,各命名空間卷是相互獨立的,互不影響且互不通信。此外,集群中的所有DataNode都必須注冊到各個NameNode。Federation機制并沒有完全解決單點故障問題。雖然集群中存在多個NameNode和多個命名空間,但仍然存在單點故障問題。如果其中某個NameNode失效了,那么它所管理的文件將不能訪問。HDFS的運行機制4.3.5HA機制造成集群不可用的原因主要有兩個:NameNode節(jié)點宕機,導致整個集群不可用,直到重啟NameNode節(jié)點之后方可使用;計劃內的NameNode節(jié)點軟件或硬件升級,導致集群在短時間內不可用;Hadoop2.x允許運行主(active)、備(standby)兩個NameNode,從而可以在NameNode節(jié)點出現(xiàn)故障或維護時,快速啟用備用狀態(tài)的NameNode節(jié)點,以確保集群正常運行。HDFS的運行機制在雙NameNode的Hadoop分布式集群中,分別處于active和standby狀態(tài)的兩個NameNode節(jié)點保證了HDFS的高可用性(HA)。activeNameNode負責HDFS集群的所有操作,而standbyNameNode作為備用。一旦activeNameNode發(fā)生故障,standbyNameNode可以快速切換并恢復故障。standbyNameNode的狀態(tài)和activeNameNode始終保持同步(元數(shù)據(jù)信息保持一致),它們之間通過JournalNode守護進程進行通信。standbyNameNode同樣保存了block的位置信息,并且DataNode在通過心跳機制發(fā)送block信息給activeNameNode的同時,也會將block信息發(fā)送給standbyNameNode。HDFS的運行機制4.3.6安全模式當NameNode啟動時,集群會自動進入安全模式,在該模式下,NameNode會檢查block的完整性。安全模式可以保證數(shù)據(jù)塊的安全性,它是Hadoop集群的一種保護模式。此外,安全模式還是一種只讀模式,在該模式下,用戶既不能對命名空間進行任何修改,也不能創(chuàng)建、復制、追加和刪除數(shù)據(jù),但是可以執(zhí)行查看目錄及文件、下載文件等操作。HDFS的運行機制在正常情況下,當NameNode完成啟動后(額外延遲30s)就會退出安全模式。但是,如果DataNode丟失的數(shù)據(jù)塊超過設定的值,集群就會一直處于安全模式。不過,可以通過執(zhí)行以下命令來強制退出安全模式:#hdfsdfsadmin-safemodeleave安全模式也可以手動進入,即執(zhí)行以下命令:#hdfsdfsadmin-safemodeenter此外,執(zhí)行以下命令可以查看安全模式的狀態(tài):#hdfsdfsadmin-safemodegetHDFS的運行機制4.3.7垃圾回收在HDFS集群中,沒有實際利用價值的block副本可以認為是垃圾。在集群運行正常的情況下,如果一個文件被刪除,那么與該文件相關的數(shù)據(jù)塊自然也就成了垃圾。當用戶或應用程序刪除某個文件時,文件并不會立即從HDFS中刪除,而是被移到了一個類似回收站的地方。當文件的刪除時間超過一定期限,NameNode就會自動將該文件從命名空間中刪除,這會使得該文件相關的數(shù)據(jù)塊被釋放。HDFS的運行機制當利用balancer通過復制操作重新調整數(shù)據(jù)塊分布后,被調整的原始數(shù)據(jù)塊也會成為垃圾,這種垃圾會被放進最近無效集(recentinvalidatesets)。在集群異常的情況下,如DataNode節(jié)點宕機一段時間后重啟,由于NameNode會重新進行副本復制,這將導致在DataNode重啟后副本數(shù)量高于指定值,那么該DataNode上的block就會因副本過期而失去價值,沒有價值的數(shù)據(jù)等同于垃圾,這種垃圾會在DataNode向NameNode發(fā)送“心跳”時被處理。04HDFS的工作流程HDFS的工作流程在Hadoop集群中,客戶端與NameNode節(jié)點之間的通信、NameNode與DataNode節(jié)點之間的通信、DataNode節(jié)點彼此之間的通信,都是基于RPC(遠程過程調用)機制的。RPC是一個節(jié)點通過網(wǎng)絡調用另一個節(jié)點的子程序或服務時應遵守的協(xié)議標準。使用它時,無需了解底層網(wǎng)絡協(xié)議(如TCP、UDP等)。通過客戶端、NameNode和DataNode的交互,可以實現(xiàn)HDFS文件的創(chuàng)建、復制、刪除等操作。HDFS的工作流程可以分為啟動流程、讀流程、寫流程和刪除流程。HDFS的工作流程4.4.1啟動流程在HDFS的啟動過程中,需要啟動NameNode和DataNode。NameNode啟動時,會先進入安全模式。在安全模式下,NameNode需要處理兩件事:(1)等待每個DataNode的“心跳”以獲取所有block狀態(tài)報告,并通過“心跳”來標記DataNode的存活狀態(tài)。然后,NameNode將接收到的各DataNode發(fā)送的block狀態(tài)報告與其元數(shù)據(jù)對比,以判斷各DataNode的數(shù)據(jù)塊是否正常。HDFS的工作流程(2)在內存中加載fsimage,然后通過將fsimage和edits合并生成一個新的fsimage,同時創(chuàng)建一個新的edits;合并完成后刪除舊的fsimage和edits,并將新的fsimage和edits重命名。NameNode的啟動流程DataNode啟動時,會開啟一個DataBlockScanner進程來掃描block,并且由該進程定期向各個NameNode發(fā)送“心跳”。HDFS的工作流程4.4.2讀流程客戶端讀取HDFS文件時,首先會訪問NameNode以確認是否可以讀取該文件,待確認成功后,客戶端獲得該文件的block及DataNode信息,然后執(zhí)行HDFS的讀操作來獲取數(shù)據(jù)。在讀取數(shù)據(jù)結束時,需關閉文件輸入流。HDFS數(shù)據(jù)的讀流程HDFS的工作流程(1)客戶端調用DistributedFileSystem對象的open()方法。此后,DistributedFileSystem將創(chuàng)建一個FSDataInputStream對象,并用HDFS的輸入流對象DFSInputStream來實例化FSDataInputStream。此外,F(xiàn)SDataInputStream對象負責存儲塊信息和DataNode信息,以及后續(xù)的數(shù)據(jù)讀取工作。(2)DistributedFileSystem向NameNode發(fā)送RPC請求,NameNode會檢查讀取文件是否存在,以及當前客戶端是否具有讀取該文件的權限。如果都沒有問題,NameNode會視情況返回文件的部分或者全部block列表,而對于每個block,NameNode同樣會返回該block副本的所有DataNode地址。與此同時,返回信息會根據(jù)與客戶端的遠近(非物理上的距離,而是延遲和負載大小)對DataNode節(jié)點進行排序。HDFS的工作流程(3)客戶端調用DFSInputStream的read()方法,DFSInputStream會在之前的排序結果中選擇一個最優(yōu)的DataNode節(jié)點建立數(shù)據(jù)連接,并開始讀取數(shù)據(jù)信息。(4)數(shù)據(jù)信息返回給客戶端。當數(shù)據(jù)信息讀取完畢后,DFSInputStream關閉與該DataNode的連接。(5)DFSInputStream連接下一個數(shù)據(jù)塊的最優(yōu)DataNode節(jié)點,讀取數(shù)據(jù)并返回給客戶端。當讀完一批返回信息的block列表后,如果文件讀取還沒有結束,客戶端會繼續(xù)向NameNode請求獲取下一批的block列表,直到所有數(shù)據(jù)都讀取完畢。(6)當所有數(shù)據(jù)都讀取完畢后,客戶端會調用DFSInputStream的close()方法關閉文件輸入流。HDFS的工作流程4.4.3寫流程客戶端將數(shù)據(jù)寫入到HDFS文件時,首先需要向NameNode確認寫數(shù)據(jù)的操作權限及文件是否存在(若存在,是否覆蓋),待確認成功后,客戶端在NameNode上創(chuàng)建寫入文件的元數(shù)據(jù)信息,并返回可存儲數(shù)據(jù)的block及DataNode信息,然后根據(jù)返回信息執(zhí)行副本復制過程。在寫入數(shù)據(jù)結束時,需關閉文件輸出流。HDFS數(shù)據(jù)的寫流程HDFS的工作流程(1)客戶端調用DistributedFileSystem對象的create()方法。此后,DistributedFileSystem將創(chuàng)建一個FSDataOutputStream對象,并用HDFS的輸出流對象DFSOutputStream來實例化FSDataOutputStream。(2)DistributedFileSystem向NameNode發(fā)送RPC請求,NameNode會根據(jù)要創(chuàng)建的文件是否已經(jīng)存在和客戶端是否有權限進行創(chuàng)建等執(zhí)行檢查。如果沒有問題,NameNode會為文件創(chuàng)建一個記錄,否則會讓客戶端拋出異常。(3)客戶端調用DFSOutputStream的write()方法來寫入數(shù)據(jù),DFSOutputStream將收到的數(shù)據(jù)分成一個個block大小的數(shù)據(jù)包,并放到一個數(shù)據(jù)隊列(dataqueue)中。DataStreamer可以從NameNode上獲取存儲數(shù)據(jù)的block信息及DataNode地址,然后DataStreamer將數(shù)據(jù)從隊列中取出并開始寫入DataNode。HDFS的工作流程(4)對于每個block,NameNode會分配與副本系數(shù)相等數(shù)量的DataNode來存儲block副本。DFSOutputStream將數(shù)據(jù)寫入第一個DataNode,然后該DataNode根據(jù)副本放置與機架感知策略將數(shù)據(jù)塊復制并傳輸給其他DataNode,直到寫入所有block副本。(5)每個DataNode完成數(shù)據(jù)存儲后,會向客戶端發(fā)送“確認包”(ackpacket)??蛻舳私邮茼憫?,會將對應的數(shù)據(jù)包從數(shù)據(jù)隊列中刪除。不斷執(zhí)行步驟(3)~步驟(5),直到所有數(shù)據(jù)寫完。(6)當所有數(shù)據(jù)都寫入完畢后,客戶端會調用DFSOutputStream的close()方法關閉文件輸出流。(7)客戶端調用complete()方法通知NameNode文件寫入完成。HDFS的工作流程4.4.4刪除流程1.使用HDFS命令刪除文件與Linux系統(tǒng)的回收站設計類似,HDFS也為每個用戶創(chuàng)建了一個回收站目錄。例如,root用戶的回收站目錄為hdfs://hadoop0:9000/user/root/.Trash。當用戶使用HDFS命令執(zhí)行刪除操作后,系統(tǒng)會將需要刪除的文件移動到回收站的“/Current”文件夾(系統(tǒng)自動創(chuàng)建)下。例如,當root用戶使用HDFS命令刪除“/jqe/1.txt”文件時,文件會被移動到回收站中,具體位置為hdfs://hadoop0:9000/user/root/.Trash/Current/jqe/1.txt。與刪除普通文件一樣,用戶也可以手動刪除回收站中的文件。不過,HDFS會自動檢測這個文件,如果是回收站中的文件,那么該文件就不會被移動到用戶的回收站中,而是將其徹底刪除。回收站中保存的文件是有時間限制的,如果用戶在規(guī)定的時間周期內沒有將文件從回收站中恢復出來,那么HDFS就會將該文件徹底刪除(NameNode的后臺線程emptier負責管理和監(jiān)控回收站中的所有文件及目錄)。之后,用戶就再也無法找回那個刪除的文件了。HDFS的工作流程HDFS的工作流程2.使用JavaAPI刪除文件當用戶使用JavaAPI刪除HDFS文件時,在執(zhí)行完delete()方法一段時間后,要刪除文件的數(shù)據(jù)塊才能被真正地刪除。具體文件刪除過程如下:(1)客戶端向NameNode發(fā)送刪除操作的RPC請求。(2)NameNode收到客戶端的刪除請求后,會檢查要刪除的文件是否存在,以及該客戶端是否具有刪除文件的權限。待確認后,再將刪除操作更新到edits和fsimage文件。(3)NameNode更新結束后,會返回給客戶端一個確認信號,表示刪除成功。HDFS的工作流程當NameNode執(zhí)行delete()方法時,它只記錄操作和標記要刪除文件的block,而不會主動通知block副本所在的DataNode去刪除相應的block。當保存這些block副本的DataNode向NameNode發(fā)送“心跳”時,NameNode校驗到DataNode的數(shù)據(jù)不一致,就會給DataNode下達指令,讓其刪除那些無效的block副本。05HDFS的基本操作HDFS的基本操作用戶可以通過命令行接口(類似傳統(tǒng)的Shell命令)操作HDFS的文件和目錄,也可以通過JavaAPI訪問并操作HDFS。HDFS的基本操作4.5.1HDFS命令行操作Hadoop分布式文件系統(tǒng)(HDFS)中的基本操作與其他文件系統(tǒng)類似,包括創(chuàng)建文件、移動文件、查看文件目錄、讀取文件等。下面介紹一組常用的HDFS命令行操作。(1)查看HDFS支持的所有命令及解析:#hdfsdfs-help(2)查看HDFS文件系統(tǒng)根目錄下的目錄和文件:#hdfsdfs-ls/HDFS的基本操作(3)在HDFS文件系統(tǒng)根目錄下創(chuàng)建文件夾:#hdfsdfs-mkdir/mywork(4)將本地文件上傳到HDFS文件系統(tǒng)中:#hdfsdfs-puta.txt/mywork(5)將HDFS文件系統(tǒng)中的文件下載到本地(即虛擬機系統(tǒng)中):#hdfsdfs-get/mywork/a.txt/root/DownloadsHDFS的基本操作(6)將HDFS文件系統(tǒng)中的文件復制到其他目錄(必須存在):#hdfsdfs-cp/mywork/a.txt/mywork/t1/如果復制HDFS中的文件到另一個文件,則相當于將文件復制一份并重命名(源文件仍然存在),如:#hdfsdfs-cp/mywork/a.txt/mywork/b.txt(7)將HDFS文件系統(tǒng)中的文件移動到其他目錄(必須存在):#hdfsdfs-mv/mywork/a.txt/input/如果移動HDFS中的文件到另一個文件,則相當于對文件進行重命名并保存(源文件已不存在),如:#hdfsdfs-mv/mywork/b.txt/mywork/c.txtHDFS的基本操作(8)查看HDFS文件系統(tǒng)中某個文件的內容:#hdfsdfs-cat/input/word.txt(9)刪除HDFS文件系統(tǒng)中的文件或文件夾:#hdfsdfs-rm/input/a.txt#hdfsdfs-rm-r/mywork/t1(10)查看HDFS文件系統(tǒng)的可用空間信息:#hdfsdfs-df/“-r
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年生物基材料生產(chǎn)與銷售合同
- 2024旅游景區(qū)導游勞動合同書含旅游行業(yè)創(chuàng)新發(fā)展研究2篇
- 7-2 《一名物理學家的教育歷程》說課稿 2023-2024學年統(tǒng)編版高中語文必修下冊
- 2024柚子果品質量檢測與認證服務合同3篇
- 2024年財務報表保密合同3篇
- 個人住宅租賃簡明合同樣本(2024版)版B版
- 2024年水產(chǎn)養(yǎng)殖聯(lián)盟協(xié)議3篇
- 福建省南平市武夷山第三中學高三地理月考試題含解析
- 個人融資擔保借款標準化協(xié)議樣本版
- 6 影子第二課時 說課稿-2024-2025學年語文一年級上冊統(tǒng)編版
- 【傳媒大學】2024年新營銷
- 2025屆廣東省佛山市高三上學期普通高中教學質量檢測(一模)英語試卷(無答案)
- 自身免疫性腦炎課件
- 人力資源管理各崗位工作職責
- 2024-2030年撰寫:中國第三方檢測項目風險評估報告
- 信陽農(nóng)林學院《新媒體傳播學》2023-2024學年第一學期期末試卷
- 2024建筑公司年終工作總結(32篇)
- 污水廠防汛知識培訓課件
- 建立創(chuàng)新攻關“揭榜掛帥”機制行動方案
- 2024年項目投資計劃書(三篇)
- 2024年浙江省杭州余杭區(qū)機關事業(yè)單位招用編外人員27人歷年管理單位遴選500模擬題附帶答案詳解
評論
0/150
提交評論