1. 程式人生 > >HDFS寫資料詳解

HDFS寫資料詳解

HDFS寫資料詳解

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

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

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

  1. client向namenode請求上傳檔案(想要上傳到呢個路徑下)
  2. namenode慎重考慮後(主要是檢視是否具有請求中的合理路徑存在),哎呀媽路徑合理,那麼就向client響應你可以上傳了
  3. hadoop2x一個block預設為128M,檔案超過後就需要分割檔案。client通過RPC請求上傳第一個block(0~128M),請求返回DataNode資訊,意思是我現在想要上傳一部分,我總該知道我要上傳到呢個子節點下吧,這是合理請求;
  4. namonode檢視元資料給出client合理的迴應,所謂合理起始namenode內部是有相應的處理機制的,主要是考慮DataNode空間問題,和路由間的距離問題
  5. client收到迴應之後,請求與呢個DataNode下的呢個block建立連線,同時建立起傳輸管道channel,為什麼要建立管道呢,以為我們這是分散式系統,考慮的主要問題是當機器宕機時,我們還想要完成任務,所以我們就將資料進行多個副本的儲存,即使當前機器宕機,我們也能給使用者響應完整的資料。為什麼我們不這樣做呢,當第一個block上傳完畢後,其他的副本block我們複製貼上過去呢,因為我們的大資料檔案一般都最少是以G為單位的,正常都是以T為單位的,這樣操作的話,很容易存在IO阻塞現象,所以避免出現IO阻塞,我們採用通過管道,裡面主要的是PIPE LINE,分配的資料節點放在pipeline裡。datastream將資料塊寫入pipeline中的第一個資料節點,第一個資料節點將資料第二個資料節點,第二個資料節點將資料傳送給第三個資料節點。根據路由距離遠近建立理想的通道傳輸。
  6. client開始傳輸資料,理論上是管道內的block都可以通過管道進行讀取資料,但是我們建立管道是根據路由距離建立的,所以勢必存在讀取時間長短的問題,block其中一個只要有一個上傳成功,預設就是當前請求的block(0~128M)傳輸完畢。需要注意的是在這裡傳輸資料是以packet為單位進行傳輸的,以packet裡的chunk為單位進行校驗的。
  7. 第一個block上傳完畢之後,client開始請求上傳第二個block...(每上傳一個block都會向namenode請求)。