多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > php開(kāi)源 > 綜合技術(shù) > 深刻理解HDFS工作原理

深刻理解HDFS工作原理

來(lái)源:程序員人生   發(fā)布時(shí)間:2017-03-20 09:47:26 閱讀次數(shù):5672次

概述

HDFS(Hadoop Distributed File System )Hadoop散布式文件系統(tǒng)的簡(jiǎn)稱(chēng)。HDFS被設(shè)計(jì)成合適運(yùn)行在通用硬件(commodity hardware)上的散布式文件系統(tǒng)。DFS是1個(gè)高度容錯(cuò)性的系統(tǒng),合適部署在便宜的機(jī)器上。HDFS能提供高吞吐量的數(shù)據(jù)訪問(wèn),非常合適大范圍數(shù)據(jù)集上的利用。HDFS放寬了1部份POSIX束縛,來(lái)實(shí)現(xiàn)流式讀取文件系統(tǒng)數(shù)據(jù)的目的。HDFS在最開(kāi)始是作為Apache Nutch搜索引擎項(xiàng)目的基礎(chǔ)架構(gòu)而開(kāi)發(fā)的。HDFS是Apache Hadoop Core項(xiàng)目的1部份。
本篇首先對(duì)HDFS的重要特性和使用處景做1個(gè)扼要說(shuō)明,以后對(duì)HDFS的數(shù)據(jù)讀寫(xiě)、元數(shù)據(jù)管理和NameNode、SecondaryNamenode的工作機(jī)制進(jìn)行深入分析。

HDFS工作原理簡(jiǎn)介

HDFS的重要特性

HDFS是1個(gè)文件系統(tǒng),用于存儲(chǔ)和管理文件,通過(guò)統(tǒng)1的命名空間(類(lèi)似于本地文件系統(tǒng)的目錄樹(shù))。HDFS是散布式的系統(tǒng),服務(wù)器集群中各個(gè)節(jié)點(diǎn)都有自己的角色和職責(zé)。理解HDFS,需要注意以下幾個(gè)概念:

  1. HDFS中的文件在物理上是分塊存儲(chǔ)(block),塊的大小可以通過(guò)配置參數(shù)(
    dfs.blocksize)來(lái)規(guī)定,默許大小在hadoop2.x版本中是128M,之前的版本中是64M。
  2. HDFS文件系統(tǒng)會(huì)給客戶(hù)端提供1個(gè)統(tǒng)1的抽象目錄樹(shù),客戶(hù)端通過(guò)路徑來(lái)訪問(wèn)文件,形如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data
  3. 目錄結(jié)構(gòu)及文件分塊位置信息(元數(shù)據(jù))的管理由namenode節(jié)點(diǎn)承當(dāng),namenode是HDFS集群主節(jié)點(diǎn),負(fù)責(zé)保護(hù)全部hdfs文件系統(tǒng)的目錄樹(shù),和每個(gè)路徑(文件)所對(duì)應(yīng)的數(shù)據(jù)塊信息(blockid及所在的datanode服務(wù)器
  4. 文件的各個(gè)block的存儲(chǔ)管理由datanode節(jié)點(diǎn)承當(dāng),datanode是HDFS集群從節(jié)點(diǎn),每個(gè)block都可以在多個(gè)datanode上存儲(chǔ)多個(gè)副本(副本數(shù)量也能夠通過(guò)參數(shù)設(shè)置dfs.replication,默許是3)
  5. Datanode會(huì)定期向Namenode匯報(bào)本身所保存的文件block信息,而namenode則會(huì)負(fù)責(zé)保持文件的副本數(shù)量,HDFS的內(nèi)部工作機(jī)制對(duì)客戶(hù)端保持透明,客戶(hù)端要求訪問(wèn)HDFS都是通過(guò)向namenode申請(qǐng)來(lái)進(jìn)行。
  6. HDFS是設(shè)計(jì)成適應(yīng)1次寫(xiě)入,屢次讀出的場(chǎng)景,且不支持文件的修改。需要頻繁的RPC交互,寫(xiě)入性能不好。

HDFS寫(xiě)數(shù)據(jù)分析

客戶(hù)端要向HDFS寫(xiě)數(shù)據(jù),首先要跟namenode通訊以確認(rèn)可以寫(xiě)文件并取得接收文件block的datanode,然后客戶(hù)端按順序?qū)⑽募鹨籦lock傳遞給相應(yīng)datanode,并由接收到block的datanode負(fù)責(zé)向其他datanode復(fù)制block的副本。
對(duì)HDFS寫(xiě)數(shù)據(jù)的流程大概可以用以下的流程圖表示:
這里寫(xiě)圖片描述
7. 客戶(hù)端向namenode發(fā)送上傳文件要求,namenode對(duì)要上傳目錄和文件進(jìn)行檢查,判斷是不是可以上傳,并向客戶(hù)端返回檢查結(jié)果。
8. 客戶(hù)端得到上傳文件的允許后讀取客戶(hù)端配置,如果沒(méi)有指定配置則會(huì)讀取默許配置(例如副本數(shù)和塊大小默許為3和128M,副本是由客戶(hù)端決定的)。向namenode要求上傳1個(gè)數(shù)據(jù)塊。
9. namenode會(huì)根據(jù)客戶(hù)真?zhèn)€配置來(lái)查詢(xún)datanode信息,如果使用默許配置,那末終究結(jié)果會(huì)返回同1個(gè)機(jī)架的兩個(gè)datanode和另外一個(gè)機(jī)架的datanode。這稱(chēng)為“機(jī)架感知”策略。
10. 客戶(hù)端在開(kāi)始傳輸數(shù)據(jù)塊之前會(huì)把數(shù)據(jù)緩存在本地,當(dāng)緩存大小超過(guò)了1個(gè)數(shù)據(jù)塊的大小,客戶(hù)端就會(huì)從namenode獲得要上傳的datanode列表。以后會(huì)在客戶(hù)端和第1個(gè)datanode建立連接開(kāi)始流式的傳輸數(shù)據(jù),這個(gè)datanode會(huì)1小部份1小部份(4K)的接收數(shù)據(jù)然后寫(xiě)入本地倉(cāng)庫(kù),同時(shí)會(huì)把這些數(shù)據(jù)傳輸?shù)降?個(gè)datanode,第2個(gè)datanode也一樣1小部份1小部份的接收數(shù)據(jù)并寫(xiě)入本地倉(cāng)庫(kù),同時(shí)傳輸給第3個(gè)datanode,順次類(lèi)推。這樣逐級(jí)調(diào)用和返回以后,待這個(gè)數(shù)據(jù)塊傳輸完成客戶(hù)端后告知namenode數(shù)據(jù)塊傳輸完成,這時(shí)候候namenode才會(huì)更新元數(shù)據(jù)信息記錄操作日志。
11. 第1個(gè)數(shù)據(jù)塊傳輸完成后會(huì)使用一樣的方式傳輸下面的數(shù)據(jù)塊直到全部文件上傳完成。
細(xì)節(jié):
a.要求和應(yīng)對(duì)是使用RPC的方式,客戶(hù)端通過(guò)ClientProtocol與namenode通訊,namenode和datanode之間使用DatanodeProtocol交互。在設(shè)計(jì)上,namenode不會(huì)主動(dòng)發(fā)起RPC,而是響應(yīng)來(lái)自客戶(hù)端或 datanode 的RPC要求。客戶(hù)端和datanode之間是使用socket進(jìn)行數(shù)據(jù)傳輸,和namenode之間的交互采取nio封裝的RPC。
b.HDFS有自己的序列化協(xié)議。
c.在數(shù)據(jù)塊傳輸成功后但客戶(hù)端沒(méi)有告知namenode之前如果namenode宕機(jī)那末這個(gè)數(shù)據(jù)塊就會(huì)丟失。
d.在流式復(fù)制時(shí),逐級(jí)傳輸和響應(yīng)采取響應(yīng)隊(duì)列來(lái)等待傳輸結(jié)果。隊(duì)列響應(yīng)完成后返回給客戶(hù)端。
c.在流式復(fù)制時(shí)如果有1臺(tái)或兩臺(tái)(不是全部)沒(méi)有復(fù)制成功,不影響最后結(jié)果,只不過(guò)datanode會(huì)定期向namenode匯報(bào)本身信息。如果發(fā)現(xiàn)異常namenode會(huì)指揮datanode刪除殘余數(shù)據(jù)和完善副本。如果副本數(shù)量少于某個(gè)最小值就會(huì)進(jìn)入安全模式。

HDFS讀數(shù)據(jù)分析

客戶(hù)端將要讀取的文件路徑發(fā)送給namenode,namenode獲得文件的元信息(主要是block的寄存位置信息)返回給客戶(hù)端,客戶(hù)端根據(jù)返回的信息找到相應(yīng)datanode逐一獲得文件的block并在客戶(hù)端本地進(jìn)行數(shù)據(jù)追加合并從而取得全部文件。
HDFS讀數(shù)據(jù)步驟大概可以用以下的流程圖表示:
這里寫(xiě)圖片描述
12. 客戶(hù)端向namenode發(fā)起RPC調(diào)用,要求讀取文件數(shù)據(jù)。
13. namenode檢查文件是不是存在,如果存在則獲得文件的元信息(blockid和對(duì)應(yīng)的datanode列表)。
14. 客戶(hù)端收到元信息后選取1個(gè)網(wǎng)絡(luò)距離最近的datanode,順次要求讀取每一個(gè)數(shù)據(jù)塊。客戶(hù)端首先要校檢文件是不是破壞,如果破壞,客戶(hù)端會(huì)選取另外的datanode要求。
15. datanode與客戶(hù)端簡(jiǎn)歷socket連接,傳輸對(duì)應(yīng)的數(shù)據(jù)塊,客戶(hù)端收到數(shù)據(jù)緩存到本地,以后寫(xiě)入文件。
順次傳輸剩下的數(shù)據(jù)塊,直到全部文件合并完成。
注:文件合并的問(wèn)題從某個(gè)Datanode獲得的數(shù)據(jù)塊有多是破壞的,破壞多是由Datanode的存儲(chǔ)裝備毛病、網(wǎng)絡(luò)毛病或軟件bug釀成的。HDFS客戶(hù)端軟件實(shí)現(xiàn)了對(duì)HDFS文件內(nèi)容的校驗(yàn)和(checksum)檢查。當(dāng)客戶(hù)端創(chuàng)建1個(gè)新的HDFS文件,會(huì)計(jì)算這個(gè)文件每一個(gè)數(shù)據(jù)塊的校驗(yàn)和,并將校驗(yàn)和作為1個(gè)單獨(dú)的隱藏文件保存在同1個(gè)HDFS名字空間下。當(dāng)客戶(hù)端獲得文件內(nèi)容后,它會(huì)檢驗(yàn)從Datanode獲得的數(shù)據(jù)跟相應(yīng)的校驗(yàn)和文件中的校驗(yàn)和是不是匹配,如果不匹配,客戶(hù)端可以選擇從其他Datanode獲得該數(shù)據(jù)塊的副本。

HDFS刪除數(shù)據(jù)分析

HDFS刪除數(shù)據(jù)比較流程相對(duì)簡(jiǎn)單,只列出詳細(xì)步驟:
16. 客戶(hù)端向namenode發(fā)起RPC調(diào)用,要求刪除文件。namenode檢查合法性。
17. namenode查詢(xún)文件相干元信息,向存儲(chǔ)文件數(shù)據(jù)塊的datanode發(fā)出刪除要求。
18. datanode刪除相干數(shù)據(jù)塊。返回結(jié)果。
19. namenode返回結(jié)果給客戶(hù)端。
注:當(dāng)用戶(hù)或利用程序刪除某個(gè)文件時(shí),這個(gè)文件并沒(méi)有立刻從HDFS中刪除。實(shí)際上,HDFS會(huì)將這個(gè)文件重命名轉(zhuǎn)移到/trash目錄。只要文件還在/trash目錄中,該文件就能夠被迅速地恢復(fù)。文件在/trash中保存的時(shí)間是可配置的,當(dāng)超過(guò)這個(gè)時(shí)間時(shí),Namenode就會(huì)將該文件從名字空間中刪除。刪除文件會(huì)使得該文件相干的數(shù)據(jù)塊被釋放。注意,從用戶(hù)刪除文件到HDFS空閑空間的增加上間會(huì)有1定時(shí)間的延遲。只要被刪除的文件還在/trash目錄中,用戶(hù)就能夠恢復(fù)這個(gè)文件。如果用戶(hù)想恢復(fù)被刪除的文件,他/她可以閱讀/trash目錄找回該文件。/trash目錄僅僅保存被刪除文件的最后副本。/trash目錄與其他的目錄沒(méi)有甚么區(qū)分,除1點(diǎn):在該目錄上HDFS會(huì)利用1個(gè)特殊策略來(lái)自動(dòng)刪除文件。目前的默許策略是刪除/trash中保存時(shí)間超過(guò)6小時(shí)的文件。將來(lái),這個(gè)策略可以通過(guò)1個(gè)被良好定義的接口配置。
當(dāng)1個(gè)文件的副本系數(shù)被減小后,Namenode會(huì)選擇多余的副本刪除。下次心跳檢測(cè)時(shí)會(huì)將該信息傳遞給Datanode。Datanode遂即移除相應(yīng)的數(shù)據(jù)塊,集群中的空閑空間加大。一樣,在調(diào)用setReplication API結(jié)束和集群中空閑空間增加間會(huì)有1定的延遲。

NameNode元數(shù)據(jù)管理原理分析

首先明確namenode的職責(zé):響應(yīng)客戶(hù)端要求、管理元數(shù)據(jù)。
namenode對(duì)元數(shù)據(jù)有3種存儲(chǔ)方式:內(nèi)存元數(shù)據(jù)(NameSystem)、磁盤(pán)元數(shù)據(jù)鏡像文件、數(shù)據(jù)操作日志文件(可通過(guò)日志運(yùn)算出元數(shù)據(jù))
細(xì)節(jié):HDFS不合適存儲(chǔ)小文件的緣由,每一個(gè)文件都會(huì)產(chǎn)生元信息,當(dāng)小文件多了以后元信息也就多了,對(duì)namenode會(huì)造成壓力。
3種存儲(chǔ)機(jī)制的解釋
內(nèi)存元數(shù)據(jù)就是當(dāng)前namenode正在使用的元數(shù)據(jù),是存儲(chǔ)在內(nèi)存中的。磁盤(pán)元數(shù)據(jù)鏡像文件是內(nèi)存元數(shù)據(jù)的鏡像,保存在namenode工作目錄中,它是1個(gè)準(zhǔn)元數(shù)據(jù),作用是在namenode宕機(jī)時(shí)能夠快速較準(zhǔn)確的恢復(fù)元數(shù)據(jù)。稱(chēng)為fsimage。數(shù)據(jù)操作日志文件是用來(lái)記錄元數(shù)據(jù)操作的,在每次改動(dòng)元數(shù)據(jù)時(shí)都會(huì)追加日志記錄,如果有完全的日志就能夠還原完全的元數(shù)據(jù)。主要作用是用來(lái)完善fsimage,減少fsimage和內(nèi)存元數(shù)據(jù)的差距。稱(chēng)為editslog。
checkpoint機(jī)制分析
由于namenode本身的任務(wù)就非常重要,為了不再給namenode壓力,日志合并到fsimage就引入了另外一個(gè)角色secondarynamenode。secondarynamenode負(fù)責(zé)定期把editslog合并到fsimage,“定期”是namenode向secondarynamenode發(fā)送RPC要求的,是按時(shí)間或日志記錄條數(shù)為“間隔”的,這樣即不會(huì)浪費(fèi)合并操作又不會(huì)造成fsimage和內(nèi)存元數(shù)據(jù)有很大的差距。由于元數(shù)據(jù)的改變頻率是不固定的。
每隔1段時(shí)間,會(huì)由secondary namenode將namenode上積累的所有edits和1個(gè)最新的fsimage下載到本地,并加載到內(nèi)存進(jìn)行merge(這個(gè)進(jìn)程稱(chēng)為checkpoint)。
這里寫(xiě)圖片描述
checkpoint步驟:
1. namenode向secondarynamenode發(fā)送RPC要求,要求合并editslog到fsimage。
2. secondarynamenode收到要求后從namenode上讀取(通過(guò)http服務(wù))editslog(多個(gè),轉(zhuǎn)動(dòng)日志文件)和fsimage文件。
3. secondarynamenode會(huì)根據(jù)拿到的editslog合并到fsimage。構(gòu)成最新的fsimage文件。(中間有很多步驟,把文件加載到內(nèi)存,還原成元數(shù)據(jù)結(jié)構(gòu),合并,再生成文件,新生成的文件名為fsimage.checkpoint)。
4. secondarynamenode通過(guò)http服務(wù)把fsimage.checkpoint文件上傳到namenode,并且通過(guò)RPC調(diào)用把文件改名為fsimage。
namenode和secondary namenode的工作目錄存儲(chǔ)結(jié)構(gòu)完全相同,所以,當(dāng)namenode故障退出需要重新恢復(fù)時(shí),可以從secondary namenode的工作目錄中將fsimage拷貝到namenode的工作目錄,以恢復(fù)namenode的元數(shù)據(jù)。
關(guān)于checkpoint操作的配置:

dfs.namenode.checkpoint.check.period=60 #檢查觸發(fā)條件是不是滿(mǎn)足的頻率,60秒
dfs.namenode.checkpoint.dir=file://${hadoop.tmp.dir}/dfs/namesecondary
#以上兩個(gè)參數(shù)做checkpoint操作時(shí),secondary namenode的本地工作目錄
dfs.namenode.checkpoint.edits.dir=${dfs.namenode.checkpoint.dir}
dfs.namenode.checkpoint.max-retries=3 #最大重試次數(shù)
dfs.namenode.checkpoint.period=3600 #兩次checkpoint之間的時(shí)間間隔3600秒
dfs.namenode.checkpoint.txns=1000000 #兩次checkpoint之間最大的操作記錄

editslog和fsimage文件存儲(chǔ)在$dfs.namenode.name.dir/current目錄下,這個(gè)目錄可以在hdfs-site.xml中配置的。目錄結(jié)果以下:
這里寫(xiě)圖片描述
包括edits日志文件(轉(zhuǎn)動(dòng)的多個(gè)文件),有1個(gè)是edits_inprogress_*是當(dāng)前正在寫(xiě)的日志。fsimage文件和md5校檢文件。seen_txid是記錄當(dāng)前轉(zhuǎn)動(dòng)序號(hào),代表seen_txid之前的日志都已合并完成。

$dfs.namenode.name.dir/current/seen_txid非常重要,是寄存transactionId的文件,format以后是0,它代表的是namenode里面的edits_*文件的尾數(shù),namenode重啟的時(shí)候,會(huì)依照seen_txid的數(shù)字恢復(fù)。所以當(dāng)你的hdfs產(chǎn)生異常重啟的時(shí)候,1定要比對(duì)seen_txid內(nèi)的數(shù)字是否是你edits最后的尾數(shù),不然會(huì)產(chǎn)生重啟namenode時(shí)metaData的資料有缺少,致使誤刪Datanode上過(guò)剩Block的信息。

其他概念

安全模式:Namenode啟動(dòng)后會(huì)進(jìn)入1個(gè)稱(chēng)為安全模式的特殊狀態(tài)。處于安全模式的Namenode是不會(huì)進(jìn)行數(shù)據(jù)塊的復(fù)制的。Namenode從所有的 Datanode接收心跳信號(hào)和塊狀態(tài)報(bào)告。塊狀態(tài)報(bào)告包括了某個(gè)Datanode所有的數(shù)據(jù)塊列表。每一個(gè)數(shù)據(jù)塊都有1個(gè)指定的最小副本數(shù)。當(dāng)Namenode檢測(cè)確認(rèn)某個(gè)數(shù)據(jù)塊的副本數(shù)目到達(dá)這個(gè)最小值,那末該數(shù)據(jù)塊就會(huì)被認(rèn)為是副本安全(safely replicated)的;在1定百分比(這個(gè)參數(shù)可配置)的數(shù)據(jù)塊被Namenode檢測(cè)確認(rèn)是安全以后(加上1個(gè)額外的30秒等待時(shí)間),Namenode將退出安全模式狀態(tài)。接下來(lái)它會(huì)肯定還有哪些數(shù)據(jù)塊的副本沒(méi)有到達(dá)指定數(shù)目,并將這些數(shù)據(jù)塊復(fù)制到其他Datanode上。

生活不易,碼農(nóng)辛苦
如果您覺(jué)得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線(xiàn)----------------------------
分享到:
------分隔線(xiàn)----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 综合天堂 | 日本做人爱免费视频 | 在线网 | 日本系列 1页 亚洲系列 | 在线免费观看h视频 | 一区二区三区视频免费 | 久久国产精品免费看 | 日本xxwwwxxxx| 国产资源福利 | 欧美另类xxxx | 福利盒子手机看片 | 国产热视频 | 欧美成人精品高清在线观看 | 国产 日韩欧美 | 亚洲免费精品 | 女啪啪www女高清 | 九九热视频免费 | 美女免费网站视频 | 亚洲人成在线播放网站 | 国产老妇一性一交一乱 | 在线观看男女男免费视频 | 国内精品免费视频精选在线观看 | 欧美一级特黄毛片视频 | 亚洲在线视频免费 | 亚洲图片日韩 | 国产极品粉嫩交性大片 | 毛片免费网址 | 国产理论视频在线观看 | 男女爽爽无遮挡午夜视频在线观看 | 国产成人免费不卡在线观看 | 亚洲精品国产福利一区二区三区 | 麻豆久久精品免费看国产 | h视频在线播放 | 久色国产 | 精品一区二区三区免费视频 | 国产女人成人精品视频 | 最近中文字幕国语完整视频 | 中文字幕在线精品视频入口一区 | 激情视频网址 | 久久影视精品 | 成人叼嘿视频免费网站 |