HDFS讀寫兩步教程

好程式設計師IT發表於2019-06-03

HDFS讀寫 前提

   NameNode(後設資料節點) :存放後設資料(名稱空間、副本數、許可權、塊列表、叢集配置資訊),不包含資料節點。後設資料節點將檔案系統後設資料儲存在記憶體中。

   1. DataNode(資料節點) :真正儲存資料的地方,以資料塊為單位。預設資料塊大小為128M。資料節點週期性的將所有儲存塊資訊傳送給後設資料節點。客戶端透過和NameNode節點溝通後,再向資料節點對資料讀出或寫入。

   2. SecondaryNameNode(從後設資料節點) :並不是後設資料節點的備用節點,而是配合 後設資料節點工作,與後設資料節點有不同的工作。 SecondaryNameNode週期性地將後設資料節點的名稱空間映象檔案和修改日誌合併,幫助後設資料節點將記憶體中後設資料資訊儲存到磁碟上。

   3. Client(客戶端) :客戶端就是需要獲取 HDFS系統中檔案的應用程式和介面,引發HDFS的讀/寫等操作。

   值得注意的是:

   1.namenode實際客戶端只上傳一個datanode,其餘兩個是namenode完成的。讓datenote自己複製的。然後複製完成以後逐級返回結果給namenode 如果 2,3datanode複製失敗,再有namenode分配新的datanode地址。對於客戶端來說預設上傳一個datanode就可以了,其餘的由datanode自己複製。

   2.datanode切片是由客戶端完成的。datanode第二三個副本的上傳和第一個上傳是非同步的。

HDFS 中的寫流程:

   1.根namenode通訊請求上傳檔案,namenode檢查目標檔案是否已存在,父目錄是否存在。

   2. namenode返回是否可以上傳。

   3. client請求第一個 block該傳輸到哪些datanode伺服器上。

   4. namenode返回3個datanode伺服器ABC。

   5. client請求3臺dn中的一臺A上傳資料(本質上是一個RPC呼叫,建立pipeline),A收到請求會繼續呼叫B,然後B呼叫C,將真個pipeline建立完成,逐級返回客戶端。

   6. client開始往A上傳第一個block(先從磁碟讀取資料放到一個本地記憶體快取),以packet為單位,A收到一個packet就會傳給B,B傳給C;A每傳一個packet會放入一個應答佇列等待應答。

   7.當一個block傳輸完成之後,client再次請求namenode上傳第二個block的伺服器

hdfs中的讀流程:

   1.跟namenode通訊查詢後設資料,找到檔案塊所在的datanode伺服器。

   2.挑選一臺datanode(就近原則,然後隨機)伺服器,請求建立socket流。

   3. datanode開始傳送資料。(從磁碟裡面讀取資料放入流,以packet為單位來做校驗)

   4. 客戶端以 packet為單位接收,先在本地快取,然後寫入目標檔案


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2644960/,如需轉載,請註明出處,否則將追究法律責任。

相關文章