1. 程式人生 > >大數據生態之 ——HDFS

大數據生態之 ——HDFS

data 路徑 負責 -- http datanode time img ali

大數據生態之-----HDFS

HDFS工作機制

客戶端上傳文件時,一方面由datanode存儲文件內容,另一方面有namenode負責管理block信息(切塊大小,副本數量,位於datanode上的位置信息)

一丶namenode的工作職責:

  1. 記錄元數據

a) 文件的路徑

b) 文件的副本數量

c) 文件切塊大小

d) block塊信息

e) block塊的位置信息

2. 響應客戶端請求

3. 平衡datanodeblock文件塊的存儲負載

datanode啟動後會向namenode匯報自身所持有的block文件塊的相關信息,客戶端上傳文件時,namenode會優先分配剩余空間較多的datanode

供客戶端使用。當有新的datanode節點加入集群時,namenode也會通知舊的datanode節點轉移自身一部分block塊到新的datanode

二丶namenode元數據管理機制

技術分享圖片

  1. namenode上完整的元數據存儲在內存中
  2. 內存中的元數據也會序列化到磁盤上生成fsimage文件,整個生命周期中只序列化一次
  3. namenode會對引起元數據變化的客戶端操作進行日誌記錄
  4. secondarynamenode定期從namenode上下載編號較新的日誌,將fsimage反序列化以後和解析的日誌進行合並,合並完成後生成一個新的fsimage並上傳到namenode上覆蓋掉原來的fsimage
    文件
  5. 這樣就保證了namenode上的fsimage文件一直處於一個較新的狀態,而且namenode上的日誌文件數量也處於一個可控範圍之內。

三丶datanode的工作職責

1. 接收客戶端上傳的block

2. 幫助客戶端獲取指定的block

3. 定期向namenode匯報自身所持有的block信息

四丶文件讀寫流程

4.1寫文件流程

技術分享圖片

  1. 客戶端向namenode發送文件上傳請求(攜帶文件名和路徑信息)
  2. namenode接收到客戶端請求以後會從查詢元數據中進行查詢
  3. 如果文件不存在namenode會向客戶端返回允許上傳響應
  4. 客戶端接收到namenode允許上傳響應後會發送上傳的
    block塊信息,比如需要上傳一個block,存儲3個副本
  5. namenode接收到請求以後會從集群中隨機挑選三臺可用的datanode並其地址將blockid一起發送給client
  6. 客戶端接收到namenode響應後會選取最近的那臺datanode發送block塊上傳請求和存儲該block塊的三臺datanode的地址信息
  7. 第一臺datanode接收到請求以後會向第二臺datanode發送建立block傳輸pipeline請求,第二臺datanode會向第三臺datanode發送建立block傳輸pipeline請求
  8. 第三臺datanode準備完畢後會向第二臺datanode發送準備就緒響應,第二臺datanode準備完畢後會向第一臺datanode發送準備就緒響應,此時三臺datanode都以做好準備等待接收block塊,第一臺datanode會向客戶端發送允許上傳響應
  9. 客戶端接收到datanode發送的允許上傳響應後會利用FileInputStream讀取文件並利用SocketOuputStream將文件發送給第一臺datanode,該datanode使用SocketInputStream接收數據的同時會通過block pipeline將數據發送到下一臺datanode上,三臺datanode幾乎會同時完成block的接收工作。
  10. 後續block塊的發送重復4-9步驟

4.2讀文件流程

技術分享圖片

  1. Clientname發送文件下載請求(含文件名和HDFS上存儲的路徑信息)
  2. namenode從元數據中進行查找並將block所在的datanode地址響應給Client
  3. 客戶端接收到block塊位置信息後,會選擇距離最近的datanode發送block讀取請求,
  4. datanode接收到client發送的block讀取請求以後會將數據發送給client

client接收到datanode發送的數據以後會存儲到本地磁盤並繼續請求下一個block塊並根據偏移量與第一塊接收到的block塊文件進行合並,最終獲取完整文件。

大數據生態之 ——HDFS