HDFS的讀寫過程簡述
主要的角色:
客戶端:負責發起或提交讀寫請求(如果往HDFS上儲存資料或獲取資料,就要告訴客戶端)。
namenode:HDFS的核心負責全域性協調,做任何事都要向這裡彙報,和把控所有的請求。
datanode:數量不定,負責資料的 儲存。
把資料寫到HDFS的叢集的過程
1.使用者向客戶端請求服務
請求角色:1.hdfs shell2.JAVA API 1.要將資料分為128M的塊2.以三副本的方式儲存
作為客戶端預設:1.大的檔案要拆分為128M或64M
2.檔案以多副本的方式儲存(最少為3)
2.客戶端拿到資料
客戶端拆分為2塊 客戶端請求namenode(1個128的塊和3個副本)
namenode工作: namenode想客戶端返回資訊:
1.三個副本需要是三個datanode 1.含有三個datanod,並按距離排序
2.考慮資源排程
客戶端向datanode寫資料,datanode1將相同的資料寫到datanode2,datanode2完成統一的動作給datanode3
寫資料的方式以流水線的方式完成(通俗講就是資料進來一點寫一點,直到寫完)
資料寫完後告訴namenode 1. namenode和客戶端知道第一個塊以寫完
2.客戶端以相同的步驟完成剩下的塊
完成所有寫入資料後關閉資料流 總結:客戶端:拆分檔案
namenode:提供塊在datanode中的地址
datanode:儲存資料,並以流水線的方式將資料寫完
從HDFS中讀取資料
使用者想客戶端發起讀取資料的請求 客戶端向namenode發起請求:告訴它檔名
namenode通過計算告訴客戶端源資料資訊 客戶端知道資訊,向塊發起請求
(塊在datanode中的位置,副本多少,幾個塊)
客戶端向datanode發起請求,
datanode將資料返回客戶端
HDFS的優點:
資料冗餘(多副本方式儲存)
處理流式的資料訪問(一次寫入,多次讀取的操作)
適合儲存大檔案的方式
可構建在廉價的機器上面
HDFS的缺點:
低延遲的資料訪問
不適合小檔案的儲存(重):不管是1M還是127M,都要儲存128M,然後產生源資料,若小檔案很多,則給namenode帶來很多壓力