小編給大家分享一下HDFS中讀寫過程的示例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
10年積累的成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有瓊結(jié)免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
1 客戶端(client)用 FileSystem 的open() 函數(shù)打開文件
2 DistributedFileSystem 用RPC 調(diào)用元數(shù)據(jù)節(jié)點(diǎn),得到文件的數(shù)據(jù)塊信息 。對(duì)于每一個(gè)數(shù)據(jù)塊,元數(shù)據(jù)節(jié)點(diǎn)返回保存數(shù)據(jù)塊的數(shù)據(jù)節(jié)點(diǎn)的地址 ,DistributedFileSystem 返回FSDataInputStream給客戶端,用來讀取數(shù)據(jù)。
3 客戶端調(diào)用stream的read() 函數(shù)開始讀取數(shù)據(jù) ,DFSInputSteam 連接保存此文件第一個(gè)數(shù)據(jù)塊的最近的數(shù)據(jù)節(jié)點(diǎn)
4 Data 從數(shù)據(jù)節(jié)點(diǎn)讀到客戶端(client) ,當(dāng)此數(shù)據(jù)塊讀取完畢時(shí),DFSInputStream關(guān)閉和此數(shù)據(jù)節(jié)點(diǎn)的連接,然后連接此文件下一個(gè)數(shù)據(jù)塊的最近的數(shù)據(jù)節(jié)點(diǎn)。
5 當(dāng)客戶端讀取完畢數(shù)據(jù)的時(shí)候,調(diào)用FSDataInputStream 的close()函數(shù)
在讀取數(shù)據(jù)的過程中,如果客戶端在與數(shù)據(jù)節(jié)點(diǎn)通信出現(xiàn)錯(cuò)誤,則嘗試連接包含此數(shù)據(jù)塊的下一個(gè)數(shù)據(jù)節(jié)點(diǎn)。
失敗的數(shù)據(jù)節(jié)點(diǎn)將被記錄,以后不再連接。
自簡(jiǎn)單總結(jié) : client 用FileSystem open 打開文件---> FileSystem從namenode 獲取文件的bloc location位置 返回 FSDataInputStream 給client ----> client 利用 FSDataInputStream 讀取數(shù)據(jù) --->每讀完一個(gè)數(shù)據(jù)塊關(guān)閉與此 datanode的連接 ---->直到文件所有數(shù)據(jù)塊 讀完,關(guān)閉 FSDataInputStream 的close()
1、客戶端調(diào)用create()來創(chuàng)建文件
2、 DistributedFileSystem 用RPC 調(diào)用元數(shù)據(jù)元數(shù)據(jù)節(jié)點(diǎn),在文件系統(tǒng)的命名空間創(chuàng)建一個(gè)新的文件。
元數(shù)據(jù)節(jié)點(diǎn)首先確定文件原來不存在,并且客戶端有創(chuàng)建文件的權(quán)限,然后創(chuàng)建文 件。 DistributedFileSystem 返回DFSOutputStream 客戶端用于寫數(shù)據(jù)
3、 客戶端開始寫入數(shù)據(jù),DFSOutputStream 將數(shù)據(jù)分成塊,寫入 data queue 。
4、 Data queue 由 Data Streamer讀取,并通知元數(shù)據(jù)節(jié)點(diǎn)分配數(shù)據(jù)節(jié)點(diǎn),用來存儲(chǔ)數(shù)據(jù)塊(每塊默認(rèn)復(fù)制3塊) 分配的數(shù)據(jù)節(jié)點(diǎn)放在一個(gè)pipeline里 。也即 (DFSOutputStream寫入 data queue里的block 即將要寫入pipeline 中的數(shù)據(jù)節(jié)點(diǎn)上 ,這塊的讀寫數(shù)據(jù)工作是由Data Streamer來負(fù)責(zé)的)
Data Streamer 將數(shù)據(jù)塊寫入pipeline中的 第一個(gè)數(shù)據(jù)節(jié)點(diǎn)。 第一個(gè)數(shù)據(jù)節(jié)點(diǎn)將數(shù)據(jù)塊發(fā)送給第二個(gè)數(shù)據(jù)節(jié)點(diǎn)。第二個(gè)數(shù)據(jù)節(jié)點(diǎn)將數(shù)據(jù)發(fā)送給第三個(gè)數(shù)據(jù)節(jié)點(diǎn)。依次。。
5、DFSOutputStream 為發(fā)出去的數(shù)據(jù)塊保存了 ack queue ,等待pipeline中的數(shù)據(jù)節(jié)點(diǎn)告知數(shù)據(jù)已經(jīng)寫入成功。
如果數(shù)據(jù)節(jié)點(diǎn)在寫入的過程中失?。?/p>
關(guān)閉pipeline ,將ack queue 中的數(shù)據(jù)塊放入 data queue的開始
當(dāng)前的數(shù)據(jù)塊在已經(jīng)寫入的數(shù)據(jù)節(jié)點(diǎn)中被元數(shù)據(jù)節(jié)點(diǎn)賦予新的標(biāo)示,則錯(cuò)誤節(jié)點(diǎn)重啟后能夠察覺其數(shù)據(jù)時(shí)過期的,會(huì)被刪除。
失敗的數(shù)據(jù)節(jié)點(diǎn)從pipeline 中移除,另外的數(shù)據(jù)塊則寫入pipeline中的另外兩個(gè)數(shù)據(jù)節(jié)點(diǎn)。
元數(shù)據(jù)節(jié)點(diǎn)則被通知此數(shù)據(jù)塊是復(fù)制塊數(shù)不足,將來會(huì)再創(chuàng)建第三份備份
6、當(dāng)客戶端結(jié)束寫入數(shù)據(jù),則調(diào)用stream 的 close函數(shù) 。此操作將所有的數(shù)據(jù)塊寫入 pipeline中的數(shù)據(jù)節(jié)點(diǎn),并等待ack queue 返回成功 。最后通知元數(shù)據(jù)節(jié)點(diǎn)寫入完畢。
自總結(jié)
client create --> FileSystem create調(diào)用namnode 創(chuàng)建 fsimage文件 --> 返回DFSOutputStream給客戶端 ---> 客戶端利用DFSOutputStream 開始 將block(數(shù)據(jù)分塊)寫入data queue里
--->Data Streamer來負(fù)責(zé)從data queue取數(shù)據(jù)寫入pipeline (數(shù)據(jù)節(jié)點(diǎn)列表)--->DFSOutputStream 等待pipeline 返回的ack queue -->最后通知元數(shù)據(jù)節(jié)點(diǎn)寫入完畢
安全模式
1:Name 啟動(dòng)的時(shí)候首先將fsimage(鏡像)載入內(nèi)存,并執(zhí)行(replay)編輯日志editlog的各項(xiàng)操作
2:一旦內(nèi)存中建立文件系統(tǒng)元數(shù)據(jù)映射,則創(chuàng)建一個(gè)新的fsimage 文件(這個(gè)過程不需要secondaryNamenode)和一個(gè)空的editlog
3:在安全模式下 ,各個(gè) datanode 會(huì)向namenode發(fā)送塊列表的最新情況
4:此刻namenode 運(yùn)行在安全模式 。即 namenode 的文件系統(tǒng)對(duì)于客戶端來說是只讀的(顯示目錄,顯示文件內(nèi)容等 ,寫,刪除 ,重命名都會(huì)失敗)
5:NameNode 開始監(jiān)聽RPC 和HTTP請(qǐng)求
解釋RPC:RPC(Remote Procedure Call Protocol)——遠(yuǎn)程過程通過協(xié)議,它是一種通過網(wǎng)絡(luò)從遠(yuǎn)程
計(jì)算機(jī)程序上請(qǐng)求服務(wù),而不需要了解底層網(wǎng)絡(luò)技術(shù)的協(xié)議.
6: 系統(tǒng)中數(shù)據(jù)塊的位置并不是由namenode 維護(hù)的,而是以列表形式存儲(chǔ)在datanode 中
7: 在系統(tǒng)的正常操作期間,namenode 會(huì)在內(nèi)存中保留所有塊信息的映射信息(塊在datanode什么位置)
8 : 進(jìn)入和離開安全模式:
查看namenode處于哪個(gè)狀態(tài)
hadoop dfsadmin -safemode get
進(jìn)入安全模式(hadoop啟動(dòng)的時(shí)候是在安全模式)
hadoop dfsadmin –safemode enter
離開安全模式
hadoop dfsadmin -safemode leave
看完了這篇文章,相信你對(duì)“HDFS中讀寫過程的示例分析”有了一定的了解,如果想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!