Hadoop中HDFS的存儲機制_第1頁
Hadoop中HDFS的存儲機制_第2頁
Hadoop中HDFS的存儲機制_第3頁
Hadoop中HDFS的存儲機制_第4頁
Hadoop中HDFS的存儲機制_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、Hadoop中HDFS的存儲機制HDFS (Hadoop Distributed File System)是Hadoop分布式計算中的數(shù)據(jù)存儲系統(tǒng), 是基于流數(shù)據(jù)模式訪問和處理超大文件的需求而開發(fā)的。下面我們首先介紹HDFS中的一些基礎(chǔ)概念,然后介紹HDFS中讀寫操作的過程,最后分析了 HDFS的優(yōu)缺點。1. HDFS中的基礎(chǔ)概念i=Block: HDFS中的存儲單元是每個數(shù)據(jù)塊block,HDFS默認(rèn)的最基本的存儲單位是64M的數(shù) 據(jù)塊。和普通的文件系統(tǒng)相同的是,HDFS中的文件也是被分成64M 一塊的數(shù)據(jù)塊存儲的。 不同的是,在HDFS中,如果一個文件大小小于一個數(shù)據(jù)塊的大小,它是不需要占

2、用整個數(shù) 據(jù)塊的存儲空間的。NameNode:元數(shù)據(jù)節(jié)點。該節(jié)點用來管理文件系統(tǒng)中的命名空間,是 master。其將所有的為了見和文件夾的元數(shù)據(jù)保存在一個文件系統(tǒng)樹中,這些信息在硬盤上 保存為了命名空間鏡像(namespace image)以及修改日志(edit log),后面還會講到。 此外,NameNode還保存了一個文件包括哪些數(shù)據(jù)塊,分布在哪些數(shù)據(jù)節(jié)點上。然而,這些 信息不存放在硬盤上,而是在系統(tǒng)啟動的時候從數(shù)據(jù)節(jié)點收集而成的oDataNode:數(shù)據(jù)節(jié)點, 是HDFS真正存儲數(shù)據(jù)的地方。客戶端(client)和元數(shù)據(jù)節(jié)點(NameNode)可以向數(shù)據(jù)節(jié) 點請求寫入或者讀出數(shù)據(jù)塊。此外,

3、DataNode需要周期性的向元數(shù)據(jù)節(jié)點回報其存儲的數(shù) 據(jù)塊信息。Secondary NameNode:從元數(shù)據(jù)節(jié)點。從元數(shù)據(jù)節(jié)點并不是NameNode出現(xiàn)問題 時候的備用節(jié)點,它的主要功能是周期性的將NameNode中的namespace image和edit log 合并,以防log文件過大。此外,合并過后的namespace image文件也會在Secondary NameNode上保存一份,以防NameNode失敗的時候,可以恢復(fù)。edit log:修改日志,當(dāng)文 件系統(tǒng)客戶端client進行寫操作的時候,我們就要把這條記錄放在修改日志中。在記錄了 修改日志后,NameNode則修改內(nèi)

4、存中的數(shù)據(jù)結(jié)構(gòu)。每次寫操作成功之前,edit log都會同 步到文件系統(tǒng)中。fsimage:命名空間鏡像,它是內(nèi)存中的元數(shù)據(jù)在硬盤上的checkpointo 當(dāng)NameNode失敗的時候,最新的checkpoint的元數(shù)據(jù)信息就會從fsimage加載到內(nèi)存中, 然后注意重新執(zhí)行修改日志中的操作。而Secondary NameNode就是用來幫助元數(shù)據(jù)節(jié)點將 內(nèi)存中的元數(shù)據(jù)信息checkpoint到硬盤上的。具體checkpoint的過程如下圖:(參考hadoop集群的博客)checkpoint 的過程如下:Secondary NameNode 通知 NameNode 生成新的 日志文件,以后的

5、日志都寫到新的日志文件中o Secondary NameNode用http get從NameNode獲得fsimage文件及舊的日志文件。Secondary NameNode 將fsimage文件加載到內(nèi)存中,并執(zhí)行日志文件中的操作,然后生成新的 fsimage 文件。Secondary NameNode 將新的 fsimage 文件用 http post 傳回 NameNodeo NameNode可以將舊的fsimage文件及舊的日志文件,換為新的 fsimage文件和新的日志文件(第一步生成的),然后更新fstime文件,寫入此次checkpoint的時間。這樣NameNode中的fsim

6、age文件保存了最新的 checkpoint的元數(shù)據(jù)信息,日志文件也重新開始,不會變的很大了。從元數(shù)據(jù)節(jié)點HDFS中文件讀寫操作流程在HDFS中,文件的讀寫過程就是client和NameNode以及DataNode 一起交互的過程。 我們已經(jīng)知道NameNode管理著文件系統(tǒng)的元數(shù)據(jù),DataNode存儲的是實際的數(shù)據(jù),那么 client就會聯(lián)系NameNode以獲取文件的元數(shù)據(jù),而真正的文件讀取操作是直接和DataNode 進行交互的。寫文件的過程:客戶端調(diào)用create()來創(chuàng)建文件DistributedFileSystem用RPC調(diào)用元數(shù)據(jù)節(jié)點,在文件 系統(tǒng)的命名空間中創(chuàng)建一個新的文件。

7、元數(shù)據(jù)節(jié)點首先確定文件原來不存在,并且客戶端有 創(chuàng)建文件的權(quán)限,然后創(chuàng)建新文件。DistributedFileSystem返回DFSOutputStream,客戶端用于寫數(shù)據(jù)??蛻舳碎_始寫入數(shù)據(jù),DFSOutputStream將數(shù)據(jù)分成塊,寫入data queue。 Data queue由Data Streamer讀取,并通知元數(shù)據(jù)節(jié)點分配數(shù)據(jù)節(jié)點,用來存儲數(shù)據(jù)塊(每 塊默認(rèn)復(fù)制3塊)。分配的數(shù)據(jù)節(jié)點放在一個pipeline里。Data Streamer將數(shù)據(jù)塊寫入 pipeline中的第一個數(shù)據(jù)節(jié)點。第一個數(shù)據(jù)節(jié)點將數(shù)據(jù)塊發(fā)送給第二個數(shù)據(jù)節(jié)點。第二個 數(shù)據(jù)節(jié)點將數(shù)據(jù)發(fā)送給第三個數(shù)據(jù)節(jié)點。DF

8、SOutputStream為發(fā)出去的數(shù)據(jù)塊保存了 ack queue,等待pipeline中的數(shù)據(jù)節(jié)點告知數(shù)據(jù)已經(jīng)寫入成功。如果數(shù)據(jù)節(jié)點在寫入的過程中 失?。宏P(guān)閉pipeline,將ack queue中的數(shù)據(jù)塊放入data queue的開始。當(dāng)前的數(shù)據(jù)塊在已經(jīng)寫入的數(shù)據(jù)節(jié)點中被元數(shù)據(jù)節(jié)點賦予新的標(biāo)示,則錯誤節(jié)點重啟后能夠 察覺其數(shù)據(jù)塊是過時的,會被刪除。失敗的數(shù)據(jù)節(jié)點從pipeline中移除,另外的數(shù)據(jù)塊則寫入pipeline中的另外兩個數(shù)據(jù)節(jié)點。元數(shù)據(jù)節(jié)點則被通知此數(shù)據(jù)塊是復(fù)制塊數(shù)不足,將來會再創(chuàng)建第三份備份。當(dāng)客戶端結(jié)束寫入數(shù)據(jù),則調(diào)用stream的close函數(shù)。此操作將所有的數(shù)據(jù)塊寫入

9、pipeline 中的數(shù)據(jù)節(jié)點,并等待ack queue返回成功。最后通知元數(shù)據(jù)節(jié)點寫入完畢。client JVMl:reate6:演FSDwnamenodedient nodedatanodedatancdeNdineN 缺DdiaNodeDataNodePipelinedHDF5di entDistributedHleSyflem5: jck packet讀取文件的過程:客戶端(client)用 FileSystem 的 open()函數(shù)打開文件 DistributedFileSystem用 RPC 調(diào)用 元數(shù)據(jù)節(jié)點,得到文件的數(shù)據(jù)塊信息。對于每一個數(shù)據(jù)塊,元數(shù)據(jù)節(jié)點返回保存數(shù)據(jù)塊的數(shù) 據(jù)

10、節(jié)點的地址。DistributedFileSystem返回FSDataInputStream給客戶端,用來讀取數(shù)據(jù)。 客戶端調(diào)用stream的read ()函數(shù)開始讀取數(shù)據(jù)DFSInputStream連接保存此文件第一個數(shù) 據(jù)塊的最近的數(shù)據(jù)節(jié)點。Data從數(shù)據(jù)節(jié)點讀到客戶端(client)當(dāng)此數(shù)據(jù)塊讀取完畢時,DFSInputStream關(guān)閉和此數(shù)據(jù)節(jié)點的連接,然后連接此文件下一個數(shù)據(jù)塊的最近的數(shù)據(jù)節(jié) 點。當(dāng)客戶端讀取完畢數(shù)據(jù)的時候,調(diào)用FSDataInputStream的close函數(shù)。在讀取數(shù)據(jù) 的過程中,如果客戶端在與數(shù)據(jù)節(jié)點通信出現(xiàn)錯誤,則嘗試連接包含此數(shù)據(jù)塊的下一個數(shù)據(jù) 節(jié)點。失敗的

11、數(shù)據(jù)節(jié)點將被記錄,以后不再連接。HDFS的優(yōu)缺點分析優(yōu)點:1)能夠處理超大的文件;2)流式訪問數(shù)據(jù)。HDFS能夠很好的處理“一次寫入,多次讀寫”的任務(wù)。也就是說, 一個數(shù)據(jù)集一旦生成了,就會被復(fù)制到不同的存儲節(jié)點中,然后響應(yīng)各種各樣的數(shù)據(jù)分析任 務(wù)請求。在多數(shù)情況下,分析任務(wù)都會涉及到數(shù)據(jù)集中的大部分?jǐn)?shù)據(jù)。所以,HDFS請求讀 取整個數(shù)據(jù)集要比讀取一條記錄更加高效。3)可以運行在比較廉價的商用機器集群上。缺點和改進策略:1)不適合低延遲數(shù)據(jù)訪問:HDFS是為了處理大型數(shù)據(jù)集分析任務(wù)的,主要是為達(dá)到大 數(shù)據(jù)分析,所以延遲時間可能會較高。改進策略:對于那些有低延時要求的應(yīng)用程序,HBase 是一個

12、更好的選擇。通過上層數(shù)據(jù)管理項目來盡可能地彌補這個不足。在性能上有了很大的 提升,它的口號就是goes real time。使用緩存或多master設(shè)計可以降低client的數(shù)據(jù) 請求壓力,以減少延時。還有就是對HDFS系統(tǒng)內(nèi)部的修改,這就得權(quán)衡大吞吐量與低延時 了。2)無法高效存儲大量小文件:因為Namenode把文件系統(tǒng)的元數(shù)據(jù)放置在內(nèi)存中,所以 文件系統(tǒng)所能容納的文件數(shù)目是由Namenode的內(nèi)存大小來決定。一般來說,每一個文件、 文件夾和Block需要占據(jù)150字節(jié)左右的空間,所以,如果你有100萬個文件,每一個占據(jù) 一個Block,你就至少需要300MB內(nèi)存。當(dāng)前來說,數(shù)百萬的文件還

13、是可行的,當(dāng)擴展到數(shù) 十億時,對于當(dāng)前的硬件水平來說就沒法實現(xiàn)了。還有一個問題就是,因為Map task的數(shù) 量是由splits來決定的,所以用MR處理大量的小文件時,就會產(chǎn)生過多的Maptask,線程 管理開銷將會增加作業(yè)時間。舉個例子,處理10000M的文件,若每個split為1M,那就會 有10000個Maptasks,會有很大的線程開銷;若每個split為100M,則只有100個Maptasks, 每個Maptask將會有更多的事情做,而線程的管理開銷也將減小很多。改進策略:要想讓 HDFS能處理好小文件,有不少方法。利用SequenceFile、MapFile、Har等方式歸檔小文件, 這個方法的原理就是把小文件歸檔起來管理,HBase就是基于此的。對于這種方法,如果想 找回原來的小文件內(nèi)容,那就必須得知道與歸檔文件的映射關(guān)系。橫向擴展,一個Hadoop 集群能管理的小文件有限,那就把幾個Hadoop集群拖在一個虛擬服務(wù)器后面,形成一個大 的Hadoop集群。google也是這么干過的。多Master設(shè)計,這個作用顯而易見了。正在研 發(fā)中的GFS II也要改為分布式多Master設(shè)計,還支持Master的Failove

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論