HDFS HDFS整體設計架構和原理

2021-07-04 22:20:22 字數 1777 閱讀 8552

在我們學習hdfs之前,首先要了解分布式檔案系統的概念,分布式檔案系統有很多,hdfs只是其中的一種而已。那麼分布式檔案系統是什麼呢,又有哪些優點?

隨著現在資料量越來越多,在乙個作業系統管轄的範圍存不下了,那麼就需要分配到更多的作業系統管理的磁碟中,但是這樣又不方便管理和維護,因此迫切需要一種系統來管理多台機器上的檔案,這就產生了分布式檔案管理系統。

分布式檔案系統是一種允許檔案通過網路在多台主機上分享的檔案系統,可讓多機器上的多使用者分享檔案和儲存空間。分布式檔案系統主要有下面兩個特點:

1)通透性。讓實際上是通過網路來訪問檔案的動作,由程式與使用者看來,就像是訪問本地磁碟一般。

2)容錯性。即使系統中有某些結點離線,整體來說系統仍然可以持續運作而不會有資料丟失。(這一點後面會詳細解釋)

分布式檔案系統有很多,hafs只是其中一種。適用於一次寫入多次查詢的情況,不支援併發寫操作,小檔案不適合。(下面也會解釋)

hdfs設計架構

我們先看一下系統體系圖

想要看懂這張圖,我們先得了解這幾個基本概念:

塊(block):我們可以看到圖中有 「讀取資料塊」 的字樣,那麼資料塊是什麼呢?塊在檔案系統裡面通常是指固定大小的邏輯單元,hdfs的檔案就是被分成塊進行儲存,每個hdfs塊的預設大小是64mb。我們做檔案的備份和查詢也都是以塊為單元進行的,那麼這麼做的好處是什麼?

namenode:管理節點,存放元資料,元資料又包括兩個部分:1.檔案與資料塊的對映表,2.資料塊與資料節點的對映表。這裡也就可以解釋為什麼hdfs不適合儲存小檔案了,因為不管是存大檔案或是小檔案都是需要在namenode裡寫入元資料,顯然存小檔案是不划算的。

datanode:hdfs的工作節點,存放資料塊。

hdfs為了保證對硬體上的容錯,對任何乙個資料塊都是預設存三份,因為任何乙個節點都可能發生故障,為了保證資料不被丟失,資料塊就有多分冗餘。

在上圖中,a,b,c,d都是64mb的資料塊,而且預設都有三份,其中兩份在同一機架上,在另乙個機架上也有乙份。這樣即使乙個節點掛了,還可以在同一機架的另乙個節點上找到相同資料塊。即使整個機架掛了,也可以在另乙個機架上找到。

我們可以舉個例子來理解整個過程:namenode 相當於乙個倉庫管理員,他需要維護自己的乙個賬本,而 datanode 相當於乙個倉庫,在倉庫裡面存放資料,客戶端相當於送貨人或者提貨人。當我們要存資料(貨物)的時候,送貨人想將貨物放到倉庫裡,首先要跟倉庫管理員打交道,即傳送乙個請求,倉庫管理員先檢視賬本(包含各個倉庫的資訊),看看哪些倉庫可以用之類的,然後告訴送貨員你把貨物送到某個倉庫裡面去。

心跳檢測

每個datanode定期向namenode傳送心跳訊息,來匯報自己的狀況:是否還處於active狀態,網路是否斷開之類的。

二級 namenode ,定期同步元資料映像檔案和修改日誌,當 namenode 發生故障時,secondary namenode可用來恢復檔案系統。為了防止 namenode 發生故障時,元資料丟失。大部分情況下,當namenode 正常工作時,secondary namenode 只做備份工作,而不接受請求。

切記:secondary namenode 不是 namenode 的熱備程序,也就是說它是無法直接替代 namenode 進行工作的。

xxl job簡介 整體架構設計

xxl job簡介 整體架構設計 xxl job是乙個分布式任務排程平台,其核心設計目標是開發迅速 學習簡單 輕量級 易擴充套件。xxl job 是乙個輕量級分布式任務排程框架,它的核心設計理念是把任務排程分為兩個核心部分 排程中心 xxl admin 和執行器。隔離成兩個部分。這是一種中心化的設計...

Android App整體架構設計的思考

本文是對我在知乎乙個回答的整理,其中的內容大多是對我平時的閱讀和實踐的總結,希望對android的開發者有所幫助。但畢竟是個人的一些思考,難免有疏漏,也歡迎對本文的內容提出建議。1.架構設計的目的 2.基於mvp的架構設計思路 2.1 什麼是mvp?2.2 mvp架構存在的問題 模型層 model ...

Android App整體架構

本文是對我在知乎乙個回答的整理,其中的內容大多是對我平時的閱讀和實踐的總結,希望對android的開發者有所幫助。但畢竟是個人的一些思考,難免有疏漏,也歡迎對本文的內容提出建議。模型層 model 中的整體 量是最大的,一般由大量的package組成,針對這部分需要做的就是在程式設計的過程中,做好模...