HDFS寫資料詳解

2021-09-01 16:07:47 字數 1260 閱讀 7993

hadoop模組每一部分都是分布式的,所以他們之間的通訊都是建立在rpc基礎上的,這點要明白

hdfs寫資料(上傳資料時,datanode的選擇策略:1.第乙個副本先考慮跟client最近的(同機架)2.第二個副本在考慮跨機架選擇乙個datanode,3.第三個副本就在第乙個副本同機架例外挑選乙個datanode存放)

怎樣知道呢個機器在呢個機架上呢?可以配置機架感知

client向namenode請求上傳檔案(想要上傳到呢個路徑下)

namenode慎重考慮後(主要是檢視是否具有請求中的合理路徑存在),哎呀媽路徑合理,那麼就向client響應你可以上傳了

hadoop2x乙個block預設為128m,檔案超過後就需要分割檔案。client通過rpc請求上傳第乙個block(0~128m),請求返回datanode資訊,意思是我現在想要上傳一部分,我總該知道我要上傳到呢個子節點下吧,這是合理請求;

namonode檢視元資料給出client合理的回應,所謂合理起始namenode內部是有相應的處理機制的,主要是考慮datanode空間問題,和路由間的距離問題

client收到回應之後,請求與呢個datanode下的呢個block建立連線,同時建立起傳輸管道channel,為什麼要建立管道呢,以為我們這是分布式系統,考慮的主要問題是當機器宕機時,我們還想要完成任務,所以我們就將資料進行多個副本的儲存,即使當前機器宕機,我們也能給使用者響應完整的資料。為什麼我們不這樣做呢,當第乙個block上傳完畢後,其他的副本block我們複製貼上過去呢,因為我們的大資料檔案一般都最少是以g為單位的,正常都是以t為單位的,這樣操作的話,很容易存在io阻塞現象,所以避免出現io阻塞,我們採用通過管道,裡面主要的是pipe line,分配的資料節點放在pipeline裡。datastream將資料塊寫入pipeline中的第乙個資料節點,第乙個資料節點將資料第二個資料節點,第二個資料節點將資料傳送給第三個資料節點。根據路由距離遠近建立理想的通道傳輸。

client開始傳輸資料,理論上是管道內的block都可以通過管道進行讀取資料,但是我們建立管道是根據路由距離建立的,所以勢必存在讀取時間長短的問題,block其中乙個只要有乙個上傳成功,預設就是當前請求的block(0~128m)傳輸完畢。需要注意的是在這裡傳輸資料是以packet為單位進行傳輸的,以packet裡的chunk為單位進行校驗的。

第乙個block上傳完畢之後,client開始請求上傳第二個block...(每上傳乙個block都會向namenode請求)。

HDFS寫資料過程

1 客戶端向namenode請求上傳檔案,namenode在元資料中查詢是否滿足上傳條件 路徑是否存在,檔案是否存在等 2 元資料系統返回資訊告知客戶端,可以上傳檔案 3 rpc請求上傳第乙個block 0 128m 請求返回datanode 4 元資料系統向客戶端返回若干個datanode 因為一...

HDFS寫資料流程

客戶端要向hdfs寫資料,首先要跟namenode通訊以確認可以寫檔案並獲得接收檔案block的datanode,然後,客戶端按順序將檔案逐個block傳遞給相應datanode,並由接收到block的datanode負責向其他datanode複製block的副本 客戶端執行寫入操作 當客戶端結束寫...

HDFS寫資料流程

1 客戶端向namenode請求上傳檔案,namenode檢查目標檔案是否已存在,父目錄是否存在。2 namenode返回是否可以上傳。3 客戶端請求第乙個 block上傳到哪幾個datanode伺服器上。4 namenode返回3個datanode節點,分別為dn1 dn2 dn3。5 客戶端請求...