Hadoop基礎-HDFS的讀取與寫入過程剖析
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的讀取與寫入過程剖析