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之 解析HDFS的寫檔案流程Hadoop
- hadoop實戰4--(hdfs讀流程,hdfs寫流程,副本放置策略)Hadoop
- HDFS的讀寫流程
- HDFS讀寫流程(重點)
- hadoop之 HDFS-Hadoop存檔Hadoop
- Hadoop HDFS結構示意圖以及互動關係說明Hadoop
- 大資料時代之hadoop(四):hadoop 分散式檔案系統(HDFS)大資料Hadoop分散式
- Hadoop框架:HDFS讀寫機制與API詳解Hadoop框架API
- 檔案操作之按照行讀寫檔案
- Infer - 檔案說明
- 檔案-spfile說明
- Hadoop 三劍客之 —— 分散式檔案儲存系統 HDFSHadoop分散式
- fepk檔案格式說明
- numpy陣列之讀寫檔案陣列
- python之 檔案讀與寫Python
- Hadoop 系列(一)—— 分散式檔案系統 HDFSHadoop分散式
- 【大資料】【hadoop】檢視hdfs檔案命令大資料Hadoop
- Hadoop hdfs上傳檔案報錯解決Hadoop
- 理解Hadoop分散式檔案系統HDFS(二)Hadoop分散式
- Hadoop大資料實戰系列文章之HDFS檔案系統Hadoop大資料
- Hadoop面試題之HDFSHadoop面試題
- Hadoop原理之——HDFS原理Hadoop
- HDFS讀檔案過程分析:讀取檔案的Block資料BloC
- 記一次 Centos7.x Hadoop 3.x HDFS 寫入檔案CentOSHadoop
- Java API 讀取HDFS的單檔案JavaAPI
- python學習之讀寫檔案Python
- Python之檔案讀寫小練Python
- 檔案讀寫
- Hadoop學習(一)——HDFS分散式檔案系統Hadoop分散式
- Hadoop基礎(一):分散式檔案系統HDFSHadoop分散式
- Nginx的配置檔案說明Nginx
- Docker 的配置檔案說明Docker
- LINUX常用檔案說明Linux
- android混淆檔案說明Android
- 檔案-init.ora說明
- MySQL 日誌檔案 說明MySql
- Apache 配置檔案說明(轉)Apache
- HDFS 07 - HDFS 效能調優之 合併小檔案