1. 程式人生 > >Hadoop基礎-HDFS的讀取與寫入過程剖析

Hadoop基礎-HDFS的讀取與寫入過程剖析

簡要介紹 ron data 訪問 如果 上傳數據 4.2 客戶端訪問 文件寫入

                Hadoop基礎-HDFS的讀取與寫入過程剖析

                                     作者:尹正傑

版權聲明:原創作品,謝絕轉載!否則將追究法律責任。

  本篇博客會簡要介紹hadoop的寫入過程,並不會設計到源碼,我會用圖和文字來描述hdfs的寫入過程。

一.hdfs寫數據流程

技術分享圖片

  如上圖所示,想要把一個4.2G的文件寫入到hdfs集群中,它是怎麽實現的呢?其步驟簡要如下:

1>.客戶端向NameNode請求在"/user/yinzhengjie/movies/"目錄下上傳一個名稱叫“蒼老師.rmvb”的視頻;

2>.NameNode檢查客戶端是否有權限上傳,如果有返回客戶端可以上傳,否則返回權限被拒絕。

3>.客戶端請求第一個block上傳到哪幾個DataNode服務器上;

4>.NameNode返回3個DataNode節點,分別為DataNode1,DataNode2,DataNode3(如上圖所示);

5>.客戶端請求DataNode1上傳數據,DataNode1收到請求會繼續調用DataNode2,然後DataNode2再調用DataNode3,將這個同學管道簡歷完成;

6>.DataNode1,DataNode2,DataNode3逐級應答客戶端

7>.客戶端開始往DataNode1上傳第一個block(先從磁盤讀取數據存放到一個本地內存緩沖區),以package為單位,DataNode1收到一個package就會傳給DataNode2,DataNode2傳給DataNode3;DataNode1每傳一個packet會放入一個應答隊列等待應答;

8>.當一個block傳輸完成後,客戶端再次請求NameNode上傳第二個block的服務器。(重復執行3~7步)

二.hdfs讀數據流程

技術分享圖片

  如上圖所示,想要把一個4.2G的文件從hdfs集群中讀取,它是怎麽實現的呢?其步驟簡要如下:

1>.客戶端向NameNode請求下載"/user/yinzhengjie/movies/蒼老師.rmvb"的文件;

2>.NameNode通過查詢元數據,如果找到文件塊所在的DataNode地址列表就返回給客戶端,如果沒有找到元數據信息就返回客戶端訪問的資源不存在;

3>.客戶端拿到NameNode的數據之後,挑選一臺DataNode服務器(就近原則,然後隨機)請求讀取數據;

4>.DataNode開始傳輸數據給客戶端(從磁盤裏面讀取數據放入流,以package為單位來做實驗);

5>.客戶端以package為單位接收,現在本地緩存,然後寫入目標文件;

Hadoop基礎-HDFS的讀取與寫入過程剖析