Hdfs的文件讀寫過程

0 Hdfs簡介

HDFS 是 Hadoop Distribute File System 的簡稱,意爲:Hadoop 分佈式文件系統。是 Hadoop 核心組件之一,作爲最底層的分佈式存儲服務而存在。它們是橫跨在多臺計算機上的存儲系統

優點:

1 很好的處理超大文件 GB TB PB級別 篩分爲多個分片 進行分佈式處理

2 運行於廉價的商用機器集羣上

3 高容錯性和高可靠性 副本機制

4 流式的訪問數據 讀取整個數據集比讀取單條記錄更加高效

缺點:

1 不適合低延遲的數據訪問  可以使用Hbase

2 不適合存儲大量小文件 文件的元數據由namenode進行管理 存儲在內存中 一個文件150字節左右 大量的小文件會暫用大量內容導致namenode掛掉 namenode可做集羣

3 不支持多用戶同事寫入和隨機修改 HDFS 是設計成適應一次寫入,多次讀出的場景,且不支持文件的修改。

特性:

1 master/slave 架構  namenode和多個datanode

2分塊存儲 默認大小在 hadoop2.x 版本中是 128M 1.X默認64M。

3名字空間(NameSpace)支持傳統的層次型文件組織結構

4 Namenode元數據管理

5 Datanode數據存儲

6副本機制 每個文件的 block 大小和副本系數都是可配置的 128M默認是 3

7 一次寫入,多次讀出 適應一次寫入,多次讀出的場景,且不支持文件的修改

 

1 hdfs文件的寫入過程

詳細步驟解析:

1、 client發起文件上傳請求,通過RPC與NameNode建立通訊,NameNode檢查目標文件是否已存在,父目錄是否存在,返回是否可以上傳;

2、 client請求第一個block該傳輸到哪些DataNode服務器上;

3、NameNode根據配置文件中指定的備份數量及機架感知原理進行文件分配,返回可用的DataNode的地址如:A,B,C;

 

注:Hadoop在設計時考慮到數據的安全與高效,數據文件默認在HDFS上存放三份,存儲策略爲本地一份,同機架內其它某一節點上一份,不同機架的某一節點上一份。

4、 client請求3臺DataNode中的一臺A上傳數據(本質上是一個RPC調用,建立pipeline),A收到請求會繼續調用B,然後B調用C,將整個pipeline建立完成,後逐級返回client;

5、 client開始往A上傳第一個block(先從磁盤讀取數據放到一個本地內存緩存),以packet爲單位(默認64K),A收到一個packet就會傳給B,B傳給C;A每傳一個packet會放入一個應答隊列等待應答。

6、數據被分割成一個個packet數據包在pipeline上依次傳輸,在pipeline反方向上,逐個發送ack(命令正確應答),最終由pipeline中第一個DataNode節點A將pipelineack發送給client;

7、當一個block傳輸完成之後,client再次請求NameNode上傳第二個block到服務器。

 

2 hdfs的文件的讀取過程

 

詳細步驟解析

1、Client向NameNode發起RPC請求,來確定請求文件block所在的位置;

2、 NameNode會視情況返回文件的部分或者全部block列表,對於每個block,NameNode 都會返回含有該 block 副本的 DataNode 地址;這些返回的 DN 地址,會按照集羣拓撲結構得出 DataNode 與客戶端的距離,然後進行排序,排序兩個規則:網絡拓撲結構中距離 Client 近的排靠前;心跳機制中超時彙報的 DN 狀態爲 STALE,這樣的排靠後;

3、 Client 選取排序靠前的 DataNode 來讀取 block,如果客戶端本身就是DataNode,那麼將從本地直接獲取數據(短路讀取特性);

4、底層上本質是建立Socket Stream(FSDataInputStream),重複的調用父類DataInputStream 的 read 方法,直到這個塊上的數據讀取完畢;

5、當讀完列表的 block 後,若文件讀取還沒有結束,客戶端會繼續向NameNode 獲取下一批的 block 列表;

6、讀取完一個 block 都會進行 checksum 驗證,如果讀取 DataNode 時出現錯誤,客戶端會通知 NameNode,然後再從下一個擁有該 block 副本的DataNode 繼續讀。

7、 read 方法是並行的讀取 block 信息,不是一塊一塊的讀取;NameNode 只是返回Client請求包含塊的DataNode地址,並不是返回請求塊的數據;

 8、最終讀取來所有的 block 會合併成一個完整的最終文件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章