1. 程式人生 > >HDFS分散式儲存系統筆記整理

HDFS分散式儲存系統筆記整理

HDFS分散式儲存系統筆記整理

HDFS(Hadoop Distributed File System)是Hadoop專案的核心子專案,是分散式計算中資料儲存管理的基礎,是基於流資料模式訪問和處理超大檔案的需求而開發的,可以運行於廉價的商用伺服器上。它所具有的高容錯、高可靠性、高可擴充套件性、高獲得性、高吞吐率等特徵為海量資料提供了不怕故障的儲存,為超大資料集(Large Data Set)的應用處理帶來了很多便利。

HDFS的優點(設計思想)

1.高容錯性
HDFS 認為所有計算機都可能會出問題,為了防止某個主機失效讀取不到該主機的塊檔案,它將同一個檔案塊副本分配到其它某幾個主機上,如果其中一臺主機失效,可以迅速找另一塊副本取檔案。
資料自動儲存多個節點;
備份丟失後,自動恢復。
2.海量資料的儲存
適合上T 級別的大檔案或者一堆大資料檔案的儲存(不適合大量小檔案的儲存)
3.檔案分塊儲存
HDFS 將一個完整的大檔案平均分塊(通常每塊128M)儲存到不同計算機上,這樣讀取檔案可以同時從多個主機取不同區塊的檔案。
4.移動計算
在資料儲存的地方進行計算,而不是把資料拉取到計算的地方,降低了成本,提高了效能!
5.流式資料訪問
一次寫入,並行讀取。不支援動態改變檔案內容,而是要求讓檔案一次寫入就不做變化,要變化也只能在檔案末新增內容。

6.可構建在廉價的機器上
通過多副本提高可靠性,提供了容錯和恢復機制。HDFS 可以應用在普通PC 機上,這種機制能夠讓一些公司用幾十臺廉價的計算機就可以撐起一個大資料叢集

HDFS是一個主從結構,一個HDFS叢集由一個名位元組點(NameNode)和多個數據節點(DataNode)組成。

NameNode
作用

  1. 掌控全域性,管理datanode以及元資料
  2. 接收客戶端讀寫服務
  3. 收集datanode彙報的block列表資訊
  4. namenode儲存的metadata資訊包括: 檔案大小,上傳時間(客戶端請求)許可權(依據linux系統的使用者系統的預設許可權),blockid(namenode自己分配),block副本的位置(datanode上報),Datanode的心跳資訊、檔案的屬主,
  5. 接收client的讀請求返回地址

檔案含義
editls :任何對檔案系統資料產生的操作,都會被儲存!
fsimage:檔案系統元資料的一個永久性的檢查點,包括資料塊到檔案的對映、檔案的屬性等

SecondaryNameNode
作用:
01、 分擔namenode的負載

DataNode
1.作用
01.真實資料的儲存管理
02.一次寫入,多次讀取(不修改)
03.檔案由資料塊組成,block塊大小預設是128MB
04.將資料塊儘量散佈到各個節點
2.檔案解析
blokckid:HDFS的資料塊,儲存具體的二進位制資料
資料塊的屬性資訊:版本資訊、型別資訊
3、預設的副本的個數是3,
4、備份機制
1、第一個block儲存在負載不是很高的一臺伺服器上
2、第一個備份的block儲存在與第一個block不同的機架隨機一條伺服器上
3、第二個備份在與第一個備份相同的機架隨機一臺伺服器上

Client向datanode寫資料的詳細流程
在這裡插入圖片描述
Namenode給client一批地址以後,datanode之間會形成pipeline管道

為什麼node01為伺服器namedate節點呢?
因為在node01節點上啟動了一個namenode程序

儲存在記憶體中的namenode資料不穩定,故需要將namedate元資料持久化到磁碟上
持久化過程:
01.SecondaryNameNode節點會定期和NameNode通訊,請求其停止使用edits,暫時將新的寫操作到一個新的檔案edit.new上來,這個操作是瞬間完成的。
02.SecondaryNameNode從NameNode上獲取到fsImage和edits檔案並下載到本地目錄
03.將下載下來的fsImage 和edits載入到記憶體中這個過程就是fsImage和edits的合併(checkpoint)
04.合併成功之後,將新的fsImage檔案傳送NameNode上。
05.SecondaryNamenode 會將新接收到的fsImage替換掉舊的,同時將edit.new替換edits,這樣edits就會變小。

合併機制:
1、 超過3600秒,進行合併
2、 Edits檔案超過64M,進行合併

注:並不是所有的元資料都會持久化,block位置資訊不會被持久化,在HDFS叢集啟動之時,所有的datanode都會想namenode彙報當前節點的block資訊
並不是Namenode不執行持久化,在伺服器啟動的時候,若edits裡面還有資料,會進行資料持久化
安全模式:
1、 載入fismage,載入到記憶體中
2、 如果edits檔案不為空,namenode自己合併
3、 檢查datanode的健康狀況
4、 若有datanode無法使用,指揮製作備份

處安全模式的過程中,不可以讀取檔案內容,若fsimage載入到記憶體中,可以檢視檔案目錄,但是無法讀取

HDFS叢集不允許修改、檔案一旦上傳成功不能修改block塊的大小,防止叢集泛洪

HDFS儲存流程;
1、 上傳一個大檔案,計算大檔案的block數量,大檔案大小/128M(預設)=blok個數
2、 Client向namenode彙報
(1) 當前大檔案的block數
(2) 當前大檔案屬於誰,以及許可權
(3) 上傳時間
for(Block block:blocks(大檔案切割出來的所有block)){
3、 client切割出來一個block
4、 請求block塊的id號以及地址
5、 因為namenode能夠掌控全域性,管理所有的datanode,所以他會將負載不高的datanode地址返回給client
6、 Client拿地址後,找到datanode去上傳資料
7、 Datanode將block儲存完畢後,會向nodename彙報當前的儲存情況
}