Hadoop-分佈式文件系統HDFS

HDFS的shell命令

既然是一個文件系統,它有對文件的基本操作(類似linux裏面的cp、mv、ls等)
調用方式:把hadoop裏面的bin添加到環境變量

hadoop fs -ls /  #查看HDFS的根目錄
hadoop fs -mkdir /test #在根目錄下建立test文件夾
hadoop fs -put ./xx   #上傳
hadoop fs -get /test/test.txt #下載
。。。

HDFS的架構

  • NameNode
  • DataNode
  • Secondary NameNode

例子:上傳一個文件的過程

  1. 客戶端請求上傳一個文件(請求NameNode)
  2. NameNode會分配哪幾個DataNode給客戶端,NameNode裏面記錄元數據(文件分成幾個block,每個block在那個DataNode上)
  3. 客戶端將文件上傳到DataNode上
    (1)上傳block1,上傳完了之後到block2,再到block3,如果完成了,接下來的過程跟客戶端無關了
    (2)同時當block1上傳完之後,由block1上傳副本到另一個DataNode,再由副本上傳另一個副本到另一個DataNode
    (3)如果第三個副本由第二個傳輸的時候失敗了,第二個響應第一個,第一個響應NameNode,NameNode知道第三個副本上傳失敗,會重新再分配一個DataNode,由第一或者第二個中任意一個再去上傳
    在這裏插入圖片描述

NameNode如何管理元數據

在這裏插入圖片描述

  1. 客戶端請求寫數據,NN(NameNode)會分配DataNode,這些數據會先在edits_log(很小,做緩存用)裏面保存爲日誌
  2. 當客戶端寫完之後,給NN響應,NN將日誌以元數據的形式讀到內存裏(方便查詢速度、實時響應多個客戶端)
  3. 等到edits_log滿了之後,它會和fsimage(存在硬盤的元數據,和內存中是同步的)進行合併,需要藉助Secondary NameNode(因爲這個過程需要將log數據轉到元數據的格式,需要計算時間),合併過程如下:

註釋:Checkpoint:合併操作
在這裏插入圖片描述

  • 元數據的存儲格式

在這裏插入圖片描述

  1. /test/a.log : HDFS的虛擬路徑
  2. 3 :副本數
  3. {blk_1, blk_2}:幾個block
  4. [{blk_1:[h0,h1,h3]}]:blk_1三個副本在哪幾個DataNode主機上(h0,h1,h3)

NameNode的職責

  1. 管理元數據
  2. 維護HDFS的目錄
  3. 響應客戶端的請求

DataNode的工作原理

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章