Hadoop hdfs原理詳解

2021-07-31 22:37:27 字數 1740 閱讀 4327

首先,hdfs是hadoop的分布式檔案系統,簡單的說就是hadoop用來儲存檔案的,hdhs是乙個主從結構,乙個hdfs是由namenode(名字節點),和若干個datanode(資料節點),稍後詳細介紹,hdfs對外開放檔案命名空間並允許使用者資料以檔案形式儲存。

由上圖可以看出hdfs是通過分布式集群來儲存檔案的,並且為客戶端提供乙個便捷的訪問方式,即乙個虛擬目錄結構

1.客戶端讀取檔案test.txt,並將檔案分塊(block1,block2,block3)

2.將分好的block塊放在若干臺datanode上,(本例有3個,通常乙個datanode對應一台伺服器)

3.namenode用來儲存並且管理檔案與真實block的對映關係。

4.每個block在集群中會有多個副本,預設3個,好處是可以提高資料的可靠性,還可以提高訪問的吞吐量。

namenode不儲存物理資料,只儲存某個客戶端虛擬路徑對應的各個datanode的檔案分塊資訊,所有的檔案讀取和寫入都得經過namenode,由namenode 統一管理

上圖介紹了乙個檔案上傳的具體流程,接下來我們講解namenode的edits log ,記憶體,以及fsimages的關係以及具體的運作方式

1.namenode為什麼不直接將檔案和datanode分塊的對映關係直接寫如磁碟?

這是由於效率,我們知道讀取磁碟的熟讀和直接讀取記憶體比起來簡直差太多了,當資料量過大時,簡直就是乙個悲劇

2.既然記憶體效率高,為什麼不直接儲存到記憶體呢?

資料是寶貴的,如果我們直接將對映資訊儲存到記憶體,萬一斷電了呢?所有的datanode節點再也找不回來了,所以磁碟是必須的,記憶體只是為了提高讀取效率

3.可是我們發現,namenode好像沒有直接將datanode的分塊資訊寫在記憶體中,這是為什麼呢?

namenode直接將檔案分塊資訊寫在edits log日誌中,第一,是為了防止寫了一半之後,系統出現故障,比如斷電等;第二,將最新的檔案分塊資料寫在edits log中,那麼在將檔案分塊資訊持久化到磁碟的時候,就不用直接從記憶體中讀取資料,而是直接讀取edits log中的資料,這樣可以減輕記憶體的壓力,記憶體只需要負責客戶端讀取的職責;

4.那麼edits log 中的資訊是什麼時候持久化到磁碟的呢?

namenode為我們提供了乙個閾值,用來控制edits log資訊持久化到磁碟,也就是與fsimages合併,edits log 本身是乙個很小的檔案,這樣做也是為了將其中的資訊讀取到記憶體中是的速度快,並且這也是沒有將檔案分塊資訊直接寫到磁碟的原因,讓我們想想,如果把檔案分塊資訊直接持久化到記憶體,而不是寫到edits log中,那麼當namenode接到客戶端將資料成功上傳到datanoide的通知後,需要將檔案分塊的對映資訊讀取到記憶體中,讀取edits log 這個小檔案會很快,而讀取磁碟(日積月累,磁碟上儲存了大量的資訊)就顯得太慢了。

當edits log中的資訊達到我們設定的閾值(如果不設定,使用預設值),會將自己的資訊追加到fsimages,具體只執行邏輯由scondenode控制,具體流程如下圖

最後上傳上來的新的fsimges覆蓋舊的,new edits 頂替edits log ,namenode繼續執行。

hadoop hdfs上傳檔案詳解

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

7 Hadoop HDFS框架 詳解 1

1 hdfs 源自於google的gfs 發表於2003年10月 hdfs是gfs的轉殖版 2 hadoop distributed file system 易於擴充套件的分布式檔案系統 執行在大量普通連線機器上,提供容錯機制 為大量使用者提供效能不錯的檔案訪問服務 3 namenode namen...

Hadoop HDFS 建立檔案流程詳解

通過解析客戶端建立檔案流程,認知hadoop的hdfs系統的一些功能和概念。hdfs系統核心元件,負責分布式檔案系統的名字空間管理 inode表的檔案對映管理。如果不開啟備份 故障恢復 federation模式,一般的hdfs系統就只有1個namenode,當然這樣是存在單點故障隱患的。nn管理兩個...