大數據生態之 ——HDFS
阿新 • • 發佈:2018-12-16
data 路徑 負責 -- http datanode time img ali 供客戶端使用。當有新的datanode節點加入集群時,namenode也會通知舊的datanode節點轉移自身一部分block塊到新的datanode上
大數據生態之-----HDFS
HDFS工作機制
客戶端上傳文件時,一方面由datanode存儲文件內容,另一方面有namenode負責管理block信息(切塊大小,副本數量,位於datanode上的位置信息)
一丶namenode的工作職責:
- 記錄元數據
a) 文件的路徑
b) 文件的副本數量
c) 文件切塊大小
d) block塊信息
e) block塊的位置信息
2. 響應客戶端請求
3. 平衡datanode上block文件塊的存儲負載
datanode啟動後會向namenode匯報自身所持有的block文件塊的相關信息,客戶端上傳文件時,namenode會優先分配剩余空間較多的datanode
二丶namenode元數據管理機制:
- namenode上完整的元數據存儲在內存中
- 內存中的元數據也會序列化到磁盤上生成fsimage文件,整個生命周期中只序列化一次
- namenode會對引起元數據變化的客戶端操作進行日誌記錄
- secondarynamenode定期從namenode上下載編號較新的日誌,將fsimage反序列化以後和解析的日誌進行合並,合並完成後生成一個新的fsimage並上傳到namenode上覆蓋掉原來的fsimage
- 這樣就保證了namenode上的fsimage文件一直處於一個較新的狀態,而且namenode上的日誌文件數量也處於一個可控範圍之內。
三丶datanode的工作職責
1. 接收客戶端上傳的block塊
2. 幫助客戶端獲取指定的block塊
3. 定期向namenode匯報自身所持有的block信息
四丶文件讀寫流程
4.1寫文件流程
- 客戶端向namenode發送文件上傳請求(攜帶文件名和路徑信息)
- namenode接收到客戶端請求以後會從查詢元數據中進行查詢
- 如果文件不存在namenode會向客戶端返回允許上傳響應
- 客戶端接收到namenode允許上傳響應後會發送上傳的
- namenode接收到請求以後會從集群中隨機挑選三臺可用的datanode並其地址將blockid一起發送給client
- 客戶端接收到namenode響應後會選取最近的那臺datanode發送block塊上傳請求和存儲該block塊的三臺datanode的地址信息
- 第一臺datanode接收到請求以後會向第二臺datanode發送建立block傳輸pipeline請求,第二臺datanode會向第三臺datanode發送建立block傳輸pipeline請求
- 第三臺datanode準備完畢後會向第二臺datanode發送準備就緒響應,第二臺datanode準備完畢後會向第一臺datanode發送準備就緒響應,此時三臺datanode都以做好準備等待接收block塊,第一臺datanode會向客戶端發送允許上傳響應
- 客戶端接收到datanode發送的允許上傳響應後會利用FileInputStream讀取文件並利用SocketOuputStream將文件發送給第一臺datanode,該datanode使用SocketInputStream接收數據的同時會通過block pipeline將數據發送到下一臺datanode上,三臺datanode幾乎會同時完成block的接收工作。
- 後續block塊的發送重復4-9步驟
4.2讀文件流程
- Client向name發送文件下載請求(含文件名和HDFS上存儲的路徑信息)
- namenode從元數據中進行查找並將block所在的datanode地址響應給Client
- 客戶端接收到block塊位置信息後,會選擇距離最近的datanode發送block讀取請求,
- datanode接收到client發送的block讀取請求以後會將數據發送給client
client接收到datanode發送的數據以後會存儲到本地磁盤並繼續請求下一個block塊並根據偏移量與第一塊接收到的block塊文件進行合並,最終獲取完整文件。
大數據生態之 ——HDFS