Hadoop的HDFS架構入門

banq發表於2022-01-25

在本文中,我們將瞭解 Hadoop 分散式檔案系統 (HDFS) 的真正含義以及它的各種元件。此外,我們還將瞭解 HDFS 的魅力所在——這就是它如此特別的原因。讓我們來了解一下!

 

什麼是 Hadoop 分散式檔案系統 (HDFS)?

在單臺機器上維護海量資料是很困難的。因此,有必要將資料分解成更小的塊並將其儲存在多臺機器上。

跨機器網路管理儲存的檔案系統稱為分散式檔案系統。

Hadoop分散式檔案系統(HDFS)是Hadoop的儲存元件。儲存在 Hadoop 上的所有資料都以分散式方式儲存在機器叢集中。但它有一些屬性定義了它的存在。

  • 巨大的容量——作為一個分散式檔案系統,它能夠儲存 PB 級的資料而不會出現任何故障。
  • 資料訪問——它基於“最有效的資料處理模式是一次寫入,多次讀取模式”的理念。
  • 經濟高效——HDFS 在商用硬體叢集上執行。這些是可以從任何供應商處購買的廉價機器。

Hadoop 分散式檔案系統 (HDFS) 的元件有哪些?

從廣義上講,HDFS 有兩個主要元件——資料塊和儲存這些資料塊的節點。但它的意義遠不止眼前所見。因此,讓我們一一看一下,以更好地理解。

HDFS 塊

HDFS 將檔案分解為更小的單元。這些單元中的每一個都儲存在叢集中的不同機器上。然而,這對於在 HDFS 上工作的使用者來說是透明的。對他們來說,這似乎是將所有資料儲存到一臺機器上。

這些較小的單元是 HDFS 中的。每個塊的大小預設為 128MB,您可以根據需要輕鬆更改。因此,如果您有一個大小為 512MB 的檔案,它將被分成 4 個塊,每個塊儲存 128MB。

Hadoop的HDFS架構入門

但是,如果您有一個大小為 524MB 的檔案,那麼它將被分成 5 個塊。其中 4 個每個將儲存 128MB,總計 512MB。第 5 個將儲存剩餘的 12MB。那就對了!最後一個塊不會佔用磁碟上的全部 128MB。

Hadoop的HDFS架構入門

但是,你一定想知道,為什麼在一個區塊中會有這麼大的數量?為什麼不是多個 10KB 的塊?好吧,我們通常在 Hadoop 中處理的資料量通常是 P級別或更高。

因此,如果我們建立小尺寸的塊,我們最終會得到大量的塊。這意味著我們將不得不處理關於塊位置的同樣大的後設資料,這隻會產生大量開銷。我們真的不想要那個!

將資料儲存在塊中而不是儲存完整檔案有幾個好處。

  • 檔案本身太大而無法單獨儲存在任何單個磁碟上。因此,謹慎地將其分佈在叢集上的不同機器上。
  • 它還可以通過利用並行性來適當地分散工作負載並防止單臺機器阻塞。

現在,您一定想知道,叢集中的機器呢?他們如何儲存塊以及後設資料儲存在哪裡?讓我們來了解一下。

 

HDFS中的Namenode

HDFS 執行在 master-worker 架構中,這意味著叢集中有一個 master 節點和多個 worker 節點。主節點是Namenode

Namenode是在叢集中的單獨節點上執行的主節點。

  • 管理檔案系統名稱空間,它是檔案系統樹或檔案和目錄的層次結構。
  • 儲存所有檔案的檔案所有者、檔案許可權等資訊。
  • 它還知道檔案中所有塊的位置及其大小。

所有這些資訊都以兩個檔案的形式在本地磁碟上永久維護:FsimageEdit Log

  • Fsimage儲存有關檔案系統中檔案和目錄的資訊。對於檔案,它儲存複製級別、修改和訪問時間、訪問許可權、檔案組成的塊及其大小。對於目錄,它儲存修改時間和許可權。
  • 另一方面,編輯日誌Edit Log跟蹤客戶端執行的所有寫操作。這會定期更新到記憶體中的後設資料以服務讀取請求。

每當客戶端想要向 HDFS 寫入資訊或從 HDFS 讀取資訊時,它都會與Namenode連線。Namenode 將塊的位置返回給客戶端並執行操作。

是的,沒錯,Namenode 不儲存塊。為此,我們有單獨的資料節點儲存塊。

 

HDFS 中的資料節點

Datanodes是工作節點。它們是可以輕鬆新增到叢集的廉價商品硬體。

當 Namenode 要求時, Datanodes負責儲存、檢索、複製、刪除等塊。

他們定期向 Namenode 傳送心跳,以便它知道他們的健康狀況。這樣,DataNode 還會傳送儲存在其上的塊列表,以便 Namenode 可以在其記憶體中維護塊到 Datanodes 的對映。

但是叢集中除了這兩類節點之外,還有另外一個節點叫做Secondary Namenode。讓我們看看那是什麼。

HDFS 中的輔助 Namenode

假設我們需要重新啟動Namenode,這可能會在失敗的情況下發生。這意味著我們必須將 Fsimage 從磁碟複製到記憶體。此外,我們還必須將編輯日誌的最新副本複製到 Fsimage 以跟蹤所有事務。但是如果我們在很長一段時間後重新啟動節點,那麼編輯日誌的大小可能會變大。這意味著應用編輯日誌中的事務將花費大量時間。在此期間,檔案系統將處於離線狀態。因此,為了解決這個問題,我們引入了Secondary Namenode

Secondary Namenode叢集中的另一個節點,其主要任務是定期將 Edit log 與 Fsimage 合併,並生成主節點記憶體中檔案系統後設資料的檢查點。這也稱為檢查點

Hadoop的HDFS架構入門

但是檢查點過程在計算上非常昂貴並且需要大量記憶體,這就是為什麼Secondary namenode在叢集上的單獨節點上執行的原因。

然而,儘管它的名字,Secondary Namenode 並不充當 Namenode。它僅用於檢查點並保留最新 Fsimage 的副本。

現在,HDFS 的最佳特性之一是塊的複製,這使得它非常可靠。但是它如何複製塊以及將它們儲存在哪裡?現在讓我們回答這些問題。

塊的複製

HDFS 是 Hadoop 的可靠儲存元件。這是因為儲存在檔案系統中的每個塊都複製到叢集中的不同資料節點上。這使得 HDFS 具有容錯性。

HDFS 中的預設複製因子是 3。這意味著每個塊將有兩個以上的副本,每個副本儲存在叢集中不同的 DataNode 上。但是,此數字是可配置的。

Hadoop的HDFS架構入門

但是您一定想知道這是否意味著我們佔用了太多儲存空間。例如,如果我們有 5 個 128MB 的塊,則等於 5*128*3 = 1920 MB。真的。但是這些節點是商品硬體。我們可以輕鬆擴充套件叢集以新增更多此類機器。購買機器的成本遠低於丟失資料的成本!

現在,您一定想知道,Namenode 是如何決定將副本儲存在哪個 Datanode 上的?好吧,在回答這個問題之前,我們需要看看 Hadoop 中的機架Rack是什麼。

什麼是 Hadoop 中的機架Rack?

機架是機器的集合(30-40 Hadoop中)被儲存在相同的物理位置。Hadoop 叢集中有多個機架,所有機架都通過交換機連線。

Hadoop的HDFS架構入門

機架意識

副本儲存是可靠性和讀/寫頻寬之間的權衡。為了提高可靠性,我們需要將塊副本儲存在不同的機架和 Datanode 上以提高容錯能力。當副本儲存在同一節點上時,寫入頻寬最低。因此,Hadoop 有一個預設的策略來處理這個難題,也稱為Rack Awareness演算法。

例如,如果一個塊的複製因子是 3,那麼第一個副本儲存在客戶端寫入的同一個 Datanode 上。第二個副本儲存在不同的 Datanode 上,但在不同的機架上,隨機選擇。第三個副本與第二個副本儲存在同一機架上,但在不同的 Datanode 上,再次隨機選擇。但是,如果複製因子較高,則後續副本將儲存在叢集中的隨機資料節點上。

Hadoop的HDFS架構入門

相關文章