




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、文章內(nèi)容來自Java私塾2013-12-27(Java私塾)HDFS原理 架構(gòu)和副本機(jī)制第一部分:當(dāng)前HDFS架構(gòu)詳盡分析 HDFS架構(gòu)NameNodeDataNodeSencondary NameNode 數(shù)據(jù)存儲細(xì)節(jié)NameNode 目錄結(jié)構(gòu)Namenode 的目錄結(jié)構(gòu): $ .dir/current /VERSION
2、160; /edits &
3、#160; /fsimage
4、0; /fstime .dir&
5、#160;是 hdfs-site.xml 里配置的若干個目錄組成的列表。NameNode Namenode 上保存著 HDFS 的名字空間。對于任何對文件系統(tǒng)元數(shù)據(jù)產(chǎn)生修改的操作, Namenode 都會使用一種稱為 EditLog 的事務(wù)日志記錄下來。例如,在 HDFS 中創(chuàng)建一個文件, Namenode 就會在 Editlog 中插入一條記錄來表示;
6、同樣地,修改文件的副本系數(shù)也將往 Editlog 插入一條記錄。 Namenode 在本地操作系統(tǒng)的文件系統(tǒng)中存儲這個 Editlog 。整個文件系統(tǒng)的名 字空間,包括數(shù)據(jù)塊到文件的映射、文件的屬性等,都存儲在一個稱為 FsImage 的文件中,這 個文件也是放在 Namenode 所在的本地文件系統(tǒng)上。 Namenode
7、 在內(nèi)存中保存著整個文件系統(tǒng)的名字空間和文件數(shù)據(jù)塊映射 (Blockmap) 的映像 。這個關(guān)鍵的元數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)得很緊湊,因而一個有 4G 內(nèi)存的 Namenode 足夠支撐大量的文件 和目錄。當(dāng) Namenode 啟動時,它從硬盤中讀取Editlog 和 FsImage ,將所有 Editlog 中的事務(wù)作 用在內(nèi)存中的 FsImage 上,并將這個新版本的 FsImage 從內(nèi)存中保
8、存到本地磁盤上,然后刪除 舊的 Editlog ,因?yàn)檫@個舊的 Editlog 的事務(wù)都已經(jīng)作用在 FsImage 上了。這個過程稱為一個檢查點(diǎn) (checkpoint) 。在當(dāng)前實(shí)現(xiàn)中,檢查點(diǎn)只發(fā)生在 Namenode 啟動時,在不久的將來將實(shí)現(xiàn)支持 周期性的檢查點(diǎn)。 HDFS NameSpace HDFS 支持傳統(tǒng)的層次型文件組織結(jié)構(gòu)。用戶或者應(yīng)用程
9、序可以創(chuàng)建目 錄,然后將文件保存在這些目錄里。文件系統(tǒng)名字空間的層次結(jié)構(gòu)和大多數(shù) 現(xiàn)有的文件系統(tǒng)類似:用戶可以創(chuàng)建、刪除、移動或重命名文件。當(dāng)前, HDFS 不支持用戶磁盤配額和訪問權(quán)限控制,也不支持硬鏈接和軟鏈接。但 是 HDFS 架構(gòu)并不妨礙實(shí)現(xiàn)這些特性。 Namenode 負(fù)責(zé)維護(hù)文件系統(tǒng)命名空間,任何對文件系統(tǒng)名字空間或?qū)?#160;性的修改都將被 Nam
10、enode 記錄下來。應(yīng)用程序可以設(shè)置 HDFS 保存的文件 的副本數(shù)目。文件副本的數(shù)目稱為文件的副本系數(shù),這個信息也是由 Namenode 保存的。DataNode Datanode 將 HDFS 數(shù)據(jù)以文件的形式存儲在本地的文件系統(tǒng)中,它并不知道有 關(guān) HDFS 文件的信息。它把每個HDFS 數(shù)據(jù)塊存儲在本地文件系統(tǒng)的一個單獨(dú)的文件 中。
11、0;Datanode 并不在同一個目錄創(chuàng)建所有的文件,實(shí)際上,它用試探的方法來確定 每個目錄的最佳文件數(shù)目,并且在適當(dāng)?shù)臅r候創(chuàng)建子目錄。在同一個目錄中創(chuàng)建所 有的本地文件并不是最優(yōu)的選擇,這是因?yàn)楸镜匚募到y(tǒng)可能無法高效地在單個目 錄中支持大量的文件。 當(dāng)一個 Datanode 啟動時,它會掃描本地文件系統(tǒng),產(chǎn)生一個這些本地文件對應(yīng) 的所有 HDFS 數(shù)據(jù)塊的列表,
12、然后作為報告發(fā)送到 Namenode ,這個報告就是塊狀態(tài) 報告。Secondary NameNode Secondary NameNode 定期合并 fsimage 和 edits 日志,將 edits 日志文件大小控制在一個限度下。配置Secondary NameNode conf/masters文件指定的為Secondary NameNode節(jié)點(diǎn)
13、修改在masters文件中配置了的機(jī)器上的conf/hdfs-site.xml文件,加上如下選項(xiàng): <property> <name>dfs.http.address</name> <value>namenode.hadoop-:50070</value> </property> core-site.xml:這里有2個參數(shù)可配置,但一般來說我們不做修改。fs.checkpoint.period表示多長時間記錄一次hdfs的鏡像。默認(rèn)是1小時。
14、fs.checkpoint.size表示一次記錄多大的size,默認(rèn)64M。 <property> <name>fs.checkpoint.period</name> <value>3600</value> <description>The number of seconds between two periodic checkpoints. </description> </property>
15、; <property> <name>fs.checkpoint.size</name> <value>67108864</value> <description>The size of the current edit log (in bytes) that triggers a periodic checkpoint even if the fs.checkpoint.period hasn't expired. </description> </prope
16、rty>Secondary NameNode Secondary NameNode處理流程 (1) 、 namenode 響應(yīng) Secondary namenode 請求,將 edit log 推送給 Secondary namenode , 開始重新寫一個新的 edit log 。 (2) 、 Secondary namenode
17、60;收到來自 namenode 的 fsimage 文件和 edit log 。 (3) 、 Secondary namenode 將 fsimage 加載到內(nèi)存,應(yīng)用 edit log , 并生成一 個新的 fsimage 文件。 (4) 、 Secondary namenode 將新的 fs
18、image 推送給 Namenode 。 (5) 、 Namenode 用新的 fsimage 取代舊的 fsimage , 在 fstime 文件中記下檢查 點(diǎn)發(fā)生的時HDFS通信協(xié)議 所有的 HDFS 通訊協(xié)議都是構(gòu)建在 TCP/IP 協(xié)議上??蛻舳送ㄟ^一個可
19、60;配置的端口連接到 Namenode , 通過 ClientProtocol 與 Namenode 交互。而 Datanode 是使用 DatanodeProtocol 與 Namenode 交互。再設(shè)計(jì)上, DataNode通過周期性的向 NameNode 發(fā)送心跳和數(shù)據(jù)塊來保持和 NameNode 的通信,數(shù)據(jù)塊報告的信息包括數(shù)據(jù)塊的屬性,即數(shù)據(jù)塊屬于哪 個文件,數(shù)據(jù)塊 ID ,
20、修改時間等, NameNode 的 DataNode 和數(shù)據(jù)塊的映射 關(guān)系就是通過系統(tǒng)啟動時 DataNode 的數(shù)據(jù)塊報告建立的。從 ClientProtocol 和 Datanodeprotocol 抽象出一個遠(yuǎn)程調(diào)用 ( RPC ), 在設(shè)計(jì)上, Namenode 不會主動發(fā)起 RPC , 而是是響應(yīng)來自客戶端和 Datanode 的 RPC 請求。H
21、DFS的安全模式 Namenode 啟動后會進(jìn)入一個稱為安全模式的特殊狀態(tài)。處于安全模式 的 Namenode 是不會進(jìn)行數(shù)據(jù)塊的復(fù)制的。Namenode 從所有的 Datanode 接收心跳信號和塊狀態(tài)報告。塊狀態(tài)報告包括了某個 Datanode 所有的數(shù)據(jù) 塊列表。每個數(shù)據(jù)塊都有一個指定的最小副本數(shù)。當(dāng) Namenode 檢測確認(rèn)某 個數(shù)據(jù)塊的副本數(shù)目達(dá)到這個最小值,那么該數(shù)據(jù)塊就會
22、被認(rèn)為是副本安全 (safely replicated) 的;在一定百分比(這個參數(shù)可配置)的數(shù)據(jù)塊被 Namenode 檢測確認(rèn)是安全之后(加上一個額外的 30 秒等待時間), Namenode 將退出安全模式狀態(tài)。接下來它會確定還有哪些數(shù)據(jù)塊的副本沒 有達(dá)到指定數(shù)目,并將這些數(shù)據(jù)塊復(fù)制到其他 Datanode 上。 第二部分:HDFS文件讀取的解析文件讀取流程 流程分析使用HDFS提供的客戶端開發(fā)庫Client,向遠(yuǎn)程的Nam
23、enode發(fā)起RPC請求; Namenode會視情況返回文件的部分或者全部block列表,對于每個block,Namenode都會返回有該block拷貝的DataNode地址;客戶端開發(fā)庫Client會選取離客戶端最接近的DataNode來讀取block;如果客戶端本身就是DataNode,那么將從本地直接獲取數(shù)據(jù).讀取完當(dāng)前block的數(shù)據(jù)后,關(guān)閉與當(dāng)前的DataNode連接,并為讀取下一個block尋找最佳的DataNode;當(dāng)讀完列表的block后,且文件讀取還沒有結(jié)束,客戶端開發(fā)庫會繼續(xù)向Namenode獲取下一批的block列表。讀取完一個block都會進(jìn)行checksum
24、驗(yàn)證,如果讀取datanode時出現(xiàn)錯誤,客戶端會通知Namenode,然后再從下一個擁有該block拷貝的datanode繼續(xù)讀。 第三部分:HDFS文件寫入的解析文件寫入流程 流程分析使用HDFS提供的客戶端開發(fā)庫Client,向遠(yuǎn)程的Namenode發(fā)起RPC請求;Namenode會檢查要創(chuàng)建的文件是否已經(jīng)存在,創(chuàng)建者是否有權(quán)限進(jìn)行操作,成功則會為文件 創(chuàng)建一個記錄,否則會讓客戶端拋出異常;當(dāng)客戶端開始寫入文件的時候,會將文件切分成多個packets,并在內(nèi)部以數(shù)據(jù)隊(duì)列"data queue"的形式管理這些pack
25、ets,并向Namenode申請新的blocks,獲取用來存儲replicas的合適的datanodes列表,列表的大小根據(jù)在Namenode中對replication的設(shè)置而定。開始以pipeline(管道)的形式將packet寫入所有的replicas中。把packet以流的方式寫入第一個datanode,該datanode把該packet存儲之后,再將其傳遞給在此pipeline中的下一個datanode,直到最后一個datanode,這種寫數(shù)據(jù)的方式呈流水線的形式。最后一個datanode成功存儲之后會返回一個ack packet,在pipeline里傳遞至客戶端,在客戶端的開發(fā)庫內(nèi)部
26、維護(hù)著"ack queue",成功收到datanode返回的ack packet后會從"ack queue"移除相應(yīng)的packet。如果傳輸過程中,有某個datanode出現(xiàn)了故障,那么當(dāng)前的pipeline會被關(guān)閉,出現(xiàn)故障的datanode會從當(dāng)前的pipeline中移除,剩余的block會繼續(xù)剩下的datanode中繼續(xù)以pipeline的形式傳輸,同時Namenode會分配一個新的datanode,保持replicas設(shè)定的數(shù)量。 流水線復(fù)制
27、 當(dāng)客戶端向 HDFS 文件寫入數(shù)據(jù)的時候,一開始是寫到本地臨時文件中。假設(shè)該文件的副 本系數(shù)設(shè)置為 3 ,當(dāng)本地臨時文件累積到一個數(shù)據(jù)塊的大小時,客戶端會從 Namenode 獲取一個 Datanode 列表用于存放副本。然后客戶端開始向第一個 Datanode 傳輸數(shù)據(jù),第一個 Datanode 一小部分一小部分 (4 KB) 地接收數(shù)據(jù),將每一部分寫入本地倉庫,并同時傳輸該部分到列表中 第二個
28、160;Datanode 節(jié)點(diǎn)。第二個 Datanode 也是這樣,一小部分一小部分地接收數(shù)據(jù),寫入本地 倉庫,并同時傳給第三個 Datanode 。最后,第三個 Datanode 接收數(shù)據(jù)并存儲在本地。因此, Datanode 能流水線式地從前一個節(jié)點(diǎn)接收數(shù)據(jù),并在同時轉(zhuǎn)發(fā)給下一個節(jié)點(diǎn),數(shù)據(jù)以流水線的 方式從前一個 Datanode 復(fù)制到下一個 更細(xì)節(jié)的原理
29、160;客戶端創(chuàng)建文件的請求其實(shí)并沒有立即發(fā)送給 Namenode ,事實(shí)上,在剛開始階 段 HDFS 客戶端會先將文件數(shù)據(jù)緩存到本地的一個臨時文件。應(yīng)用程序的寫操作被透 明地重定向到這個臨時文件。當(dāng)這個臨時文件累積的數(shù)據(jù)量超過一個數(shù)據(jù)塊的大小 ,客戶端才會聯(lián)系 Namenode 。 Namenode 將文件名插入文件系統(tǒng)的層次結(jié)構(gòu)中,并 且分配一個數(shù)據(jù)塊給它。然后返回 Datanode 的標(biāo)識符和目標(biāo)數(shù)據(jù)塊給客戶端。接著 客戶端將這塊數(shù)據(jù)從本地臨時文件上傳到指定的 Datanode 上。當(dāng)文件關(guān)閉時,在臨 時文件中剩余的沒有上傳的數(shù)據(jù)也會傳輸?shù)街付ǖ?#160;Datanode
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 展覽場館維護(hù)管理辦法
- 地鐵運(yùn)營指標(biāo)管理辦法
- 工會預(yù)算管理辦法發(fā)文
- 外埠銷售人員管理辦法
- 售后索賠費(fèi)用管理辦法
- 省級教育資助管理辦法
- 徐州堤壩管理辦法細(xì)則
- 福建傷殘撫恤管理辦法
- 廣州建設(shè)工程管理辦法
- 廢除酒類流通管理辦法
- 2025至2030中國銅冶煉行業(yè)發(fā)展現(xiàn)狀及應(yīng)用需求現(xiàn)狀分析報告
- 打架傷人和解協(xié)議書范本
- 20250617國金證券機(jī)器人行業(yè)研究垂直領(lǐng)域具身智能機(jī)器人的野望416mb
- 物理●湖北卷丨2024年湖北省普通高中學(xué)業(yè)水平選擇性考試物理試卷及答案
- 專利基礎(chǔ)知識教學(xué)課件
- YS/T 921-2013冰銅
- 江蘇省南京市2024屆高一數(shù)學(xué)下學(xué)期期末試題(含解析)
- AES加密算法源代碼(c語言版)
- 多旋翼無人機(jī)專業(yè)培訓(xùn)教材ppt課件
- 蒙牛乳業(yè)公司購銷合同范本
- conceptquantum與atv71的modbus串行通信(modbus通信給定速度、數(shù)字量輸出
評論
0/150
提交評論