Hadoop之HDFS檔案讀寫流程說明
HDFS檔案讀寫流程說明
一、檔案讀流程說明
讀取操作是對於Cient端是透明操作,感覺是連續的資料流
1、Client 透過FileSystem.open(filePath)方法,去與NameNode進行RPC通訊,返回該檔案的部分
或全部block列表,也就是返回FSDatainputstream物件;
2、Client呼叫FSDatainputStream物件的read()方法;
a. 去與第一個最近的DN進行read,讀取完後會check;如果ok會關閉與當前的DN通訊;check fail
會記錄失敗的block+DN資訊下次不會讀,然後去讀取第二個DN地址
b. 第二個塊最近的DN上進行讀取,check後關閉與DN通訊
c. block列表讀取完了,檔案還沒有結束,FileSystem會從NameNode獲取下一批的block列表;
3、Client條用FSDatainput物件的close方法,關閉輸入流;
總結
client > filesystem.open()與NameNode進行RPC通訊返回get block list
client > 呼叫inputstream物件read()方法
if ok > 關閉DN通訊呼叫inputstream.close()方法關閉輸入流
if fail > 記錄DN和block資訊,向第二個DN去讀取最後close();
block列表read out , file over year > filesystem獲取下一批block列表
二、檔案寫流程說明
1、Client呼叫FileSystem.create(filepath)方法,與NameNode進行RPC通訊,check該路徑的檔案是否存在和是否有建立該檔案許可權,假如ok就建立一個新檔案,但並不關聯任何的block,返回一個FSDataOutputStream物件;
2、Client呼叫FSDataOutputStream物件的write()方法,將第一個塊寫入第一個DataName,依次傳給第二個節點,第三個節點,第三個節點寫完返回一個ack packet給第二個節點,第二個節點返回第一個節點,第一個節點返回給ack packet給FSDataOutputstream物件,意味著第一個塊寫完,副本數為3;後面剩餘塊依次這樣寫;
3、檔案寫入資料完成後,Client呼叫FSDataOutputStream.close()方法,關閉輸出流,重新整理快取區的資料包;
4、最後呼叫FileSystem.complate()方法,告訴NameNode節點寫入成功;
總結:File.System.create()方法 > NameNode check(qx and exists )
if ok > 返回 FSDataOutStream物件 | if fail > return error
client 呼叫FSDataOutstream.write()方法 > 寫入DN,teturn ack packet > FSDataOutStream物件
client 呼叫FSDataOutstream.close()方法關閉輸出流 >flush快取
最後FileSystem.complate() 方法 > NameNode write ok
一、檔案讀流程說明
讀取操作是對於Cient端是透明操作,感覺是連續的資料流
1、Client 透過FileSystem.open(filePath)方法,去與NameNode進行RPC通訊,返回該檔案的部分
或全部block列表,也就是返回FSDatainputstream物件;
2、Client呼叫FSDatainputStream物件的read()方法;
a. 去與第一個最近的DN進行read,讀取完後會check;如果ok會關閉與當前的DN通訊;check fail
會記錄失敗的block+DN資訊下次不會讀,然後去讀取第二個DN地址
b. 第二個塊最近的DN上進行讀取,check後關閉與DN通訊
c. block列表讀取完了,檔案還沒有結束,FileSystem會從NameNode獲取下一批的block列表;
3、Client條用FSDatainput物件的close方法,關閉輸入流;
總結
client > filesystem.open()與NameNode進行RPC通訊返回get block list
client > 呼叫inputstream物件read()方法
if ok > 關閉DN通訊呼叫inputstream.close()方法關閉輸入流
if fail > 記錄DN和block資訊,向第二個DN去讀取最後close();
block列表read out , file over year > filesystem獲取下一批block列表
二、檔案寫流程說明
1、Client呼叫FileSystem.create(filepath)方法,與NameNode進行RPC通訊,check該路徑的檔案是否存在和是否有建立該檔案許可權,假如ok就建立一個新檔案,但並不關聯任何的block,返回一個FSDataOutputStream物件;
2、Client呼叫FSDataOutputStream物件的write()方法,將第一個塊寫入第一個DataName,依次傳給第二個節點,第三個節點,第三個節點寫完返回一個ack packet給第二個節點,第二個節點返回第一個節點,第一個節點返回給ack packet給FSDataOutputstream物件,意味著第一個塊寫完,副本數為3;後面剩餘塊依次這樣寫;
3、檔案寫入資料完成後,Client呼叫FSDataOutputStream.close()方法,關閉輸出流,重新整理快取區的資料包;
4、最後呼叫FileSystem.complate()方法,告訴NameNode節點寫入成功;
總結:File.System.create()方法 > NameNode check(qx and exists )
if ok > 返回 FSDataOutStream物件 | if fail > return error
client 呼叫FSDataOutstream.write()方法 > 寫入DN,teturn ack packet > FSDataOutStream物件
client 呼叫FSDataOutstream.close()方法關閉輸出流 >flush快取
最後FileSystem.complate() 方法 > NameNode write ok
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31441024/viewspace-2154856/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- hadoop實戰4--(hdfs讀流程,hdfs寫流程,副本放置策略)Hadoop
- HDFS的讀寫流程
- HDFS讀寫流程(重點)
- Hadoop框架:HDFS讀寫機制與API詳解Hadoop框架API
- Hadoop大資料實戰系列文章之HDFS檔案系統Hadoop大資料
- Hadoop 三劍客之 —— 分散式檔案儲存系統 HDFSHadoop分散式
- HDFS 03 - 你能說說 HDFS 的寫入和讀取過程嗎?
- Hadoop 系列(一)—— 分散式檔案系統 HDFSHadoop分散式
- Hadoop hdfs上傳檔案報錯解決Hadoop
- 【大資料】【hadoop】檢視hdfs檔案命令大資料Hadoop
- Hadoop原理之——HDFS原理Hadoop
- Hadoop Streaming 讀ORC檔案Hadoop
- 記一次 Centos7.x Hadoop 3.x HDFS 寫入檔案CentOSHadoop
- Hadoop學習(一)——HDFS分散式檔案系統Hadoop分散式
- Hadoop基礎(一):分散式檔案系統HDFSHadoop分散式
- Python之檔案讀寫小練Python
- numpy陣列之讀寫檔案陣列
- python學習之讀寫檔案Python
- fepk檔案格式說明
- Hadoop面試題之HDFSHadoop面試題
- 【Hadoop踩坑】HDFS上傳、刪除檔案失敗Hadoop
- Nginx的配置檔案說明Nginx
- HDFS 07 - HDFS 效能調優之 合併小檔案
- Hadoop 基礎之 HDFS 入門Hadoop
- Hadoop系列之HDFS 資料塊Hadoop
- Hadoop 基石HDFS 一文了解檔案儲存系統Hadoop
- Hadoop分散式檔案系統(HDFS)會不會被淘汰?Hadoop分散式
- hadoop原始碼_hdfs啟動流程_2_DataNodeHadoop原始碼
- Hadoop–HDFSHadoop
- 檔案排版(文字檔案讀寫)
- Golang 讀、寫檔案Golang
- Python 讀寫檔案Python
- Python——檔案讀寫Python
- keras讀寫檔案Keras
- 「Python」:檔案讀寫Python
- 檔案的讀寫
- nginx日誌配置檔案說明Nginx
- Hadoop HDFS分散式檔案系統 常用命令彙總Hadoop分散式