hadoop之 解析HDFS的寫檔案流程
檔案是如何寫入HDFS的 ?
下面我們來先看看下面的“寫”流程圖:
假如我們有一個檔案test.txt,想要把它放到Hadoop上,執行如下命令:
# hadoop fs -put /usr/bigdata/dataset/input/20130706/test.txt /opt/bigdata/hadoop/dataset/input/20130706 //或執行下面的命令
# hadoop fs -copyFromLocal /usr/bigdata/dataset/input/20130706/test.txt /opt/bigdata/hadoop/dataset/input/20130706
整個寫流程如下:
第一步,客戶端呼叫DistributedFileSystem的create()方法,開始建立新檔案:DistributedFileSystem建立DFSOutputStream,產生一個RPC呼叫,讓NameNode在檔案系統的名稱空間中建立這一新檔案;
第二步,NameNode接收到使用者的寫檔案的RPC請求後,誰偶先要執行各種檢查,如客戶是否有相關的創佳許可權和該檔案是否已存在等,檢查都透過後才會建立一個新檔案,並將操作記錄到編輯日誌,然後DistributedFileSystem會將DFSOutputStream物件包裝在FSDataOutStream例項中,返回客戶端;否則檔案建立失敗並且給客戶端拋IOException。
第三步,客戶端開始寫檔案:DFSOutputStream會將檔案分割成packets資料包,然後將這些packets寫到其內部的一個叫做data queue(資料佇列)。data queue會向NameNode節點請求適合儲存資料副本的DataNode節點的列表,然後這些DataNode之前生成一個Pipeline資料流管道,我們假設副本集引數被設定為3,那麼這個資料流管道中就有三個DataNode節點。
第四步,首先DFSOutputStream會將packets向Pipeline資料流管道中的第一個DataNode節點寫資料,第一個DataNode接收packets然後把packets寫向Pipeline中的第二個節點,同理,第二個節點儲存接收到的資料然後將資料寫向Pipeline中的第三個DataNode節點。
第五步,DFSOutputStream內部同樣維護另外一個內部的寫資料確認佇列——ack queue。當Pipeline中的第三個DataNode節點將packets成功儲存後,該節點回向第二個DataNode返回一個確認資料寫成功的資訊,第二個DataNode接收到該確認資訊後在當前節點資料寫成功後也會向Pipeline中第一個DataNode節點傳送一個確認資料寫成功的資訊,然後第一個節點在收到該資訊後如果該節點的資料也寫成功後,會將packets從ack queue中將資料刪除。
在寫資料的過程中,如果Pipeline資料流管道中的一個DataNode節點寫失敗了會發生什問題、需要做哪些內部處理呢?如果這種情況發生,那麼就會執行一些操作:
首先,Pipeline資料流管道會被關閉,ack queue中的packets會被新增到data queue的前面以確保不會發生packets資料包的丟失,為儲存在另一正常dataname的當前資料指定一個新的標識,並將該標識傳送給namenode,以便故障datanode在恢復後可以刪除儲存的部分資料塊;
接著,在正常的DataNode節點上的以儲存好的block的ID版本會升級——這樣發生故障的DataNode節點上的block資料會在節點恢復正常後被刪除,失效節點也會被從Pipeline中刪除;
最後,剩下的資料會被寫入到Pipeline資料流管道中的其他兩個節點中。
如果Pipeline中的多個節點在寫資料是發生失敗,那麼只要寫成功的block的數量達到dfs.replication.min(預設為1),那麼就任務是寫成功的,然後NameNode後透過一步的方式將block複製到其他節點,最後事資料副本達到dfs.replication引數配置的個數。
第六步,,完成寫操作後,客戶端呼叫close()關閉寫操作,重新整理資料;
第七步,,在資料重新整理完後NameNode後關閉寫操作流。到此,整個寫操作完成。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31383567/viewspace-2144649/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Hadoop之HDFS檔案讀寫流程說明Hadoop
- hadoop實戰4--(hdfs讀流程,hdfs寫流程,副本放置策略)Hadoop
- hadoop之 HDFS-Hadoop存檔Hadoop
- HDFS的讀寫流程
- Hadoop入門(二)之 HDFS 詳細解析Hadoop
- 大資料時代之hadoop(四):hadoop 分散式檔案系統(HDFS)大資料Hadoop分散式
- Hadoop 學習系列(二)之 HDFS 詳細解析Hadoop
- Hadoop 三劍客之 —— 分散式檔案儲存系統 HDFSHadoop分散式
- HDFS讀寫流程(重點)
- Hadoop 系列(一)—— 分散式檔案系統 HDFSHadoop分散式
- 【大資料】【hadoop】檢視hdfs檔案命令大資料Hadoop
- Hadoop hdfs上傳檔案報錯解決Hadoop
- 理解Hadoop分散式檔案系統HDFS(二)Hadoop分散式
- Hadoop大資料實戰系列文章之HDFS檔案系統Hadoop大資料
- Hadoop面試題之HDFSHadoop面試題
- Hadoop原理之——HDFS原理Hadoop
- 記一次 Centos7.x Hadoop 3.x HDFS 寫入檔案CentOSHadoop
- Hadoop學習(一)——HDFS分散式檔案系統Hadoop分散式
- Hadoop基礎(一):分散式檔案系統HDFSHadoop分散式
- HDFS 07 - HDFS 效能調優之 合併小檔案
- 【Hadoop踩坑】HDFS上傳、刪除檔案失敗Hadoop
- hadoop原始碼_hdfs啟動流程_2_DataNodeHadoop原始碼
- Hadoop 基礎之 HDFS 入門Hadoop
- Hadoop系列之HDFS 資料塊Hadoop
- hadoop之 HDFS fs 命令總結Hadoop
- hadoop HDFS之常用命令Hadoop
- Hadoop–HDFSHadoop
- Hadoop 基石HDFS 一文了解檔案儲存系統Hadoop
- Hadoop分散式檔案系統(HDFS)會不會被淘汰?Hadoop分散式
- mybatis原始碼配置檔案解析之五:解析mappers標籤流程圖MyBatis原始碼APP流程圖
- Hadoop3.2.1 【 HDFS 】原始碼分析 : Standby Namenode解析Hadoop原始碼
- Hadoop核心之HDFS 架構設計Hadoop架構
- HDFS架構指南(分散式系統Hadoop的檔案系統架構)架構分散式Hadoop
- 高可用性的HDFS—Hadoop分散式檔案系統深度實踐Hadoop分散式
- Hadoop HDFS分散式檔案系統 常用命令彙總Hadoop分散式
- hdfs小檔案分析
- Hadoop HDFS(二)Hadoop
- Hadoop HDFS(一)Hadoop