HDFS依舊是儲存的王者

2021-09-24 16:56:28 字數 2056 閱讀 2364

讓我們帶著這個問題來了解hdfs的架構與原理,我一直認為學習大資料最好的方法就是看官網。 所以對初學者來說一定要多看官網,哪怕你看不懂英文,也要用軟體翻譯過來看。

首先來看下官方介紹:

hadoop分布式檔案系統(hdfs)是一種分布式檔案系統,設計用於在商用硬體上執行。它與現有的分布式檔案系統有許多相似之處。但是,與其他分布式檔案系統的差異很大。hdfs具有高度容錯能力,旨在部署在低成本硬體上。hdfs提供對應用程式資料的高吞吐量訪問,適用於具有大型資料集的應用程式。
看這個介紹已經能夠大概了解了hdfs是個什麼東西,簡單來說就是使用多台低成本伺服器來儲存資料,並且保證高可用,從而降低了成本。

既然官網對hdfs的基本概念講的很清楚了,那我就來講講官網之外的東西。我們知道大資料的誕生最早是源於google的三篇**,第一篇**google file system的發表時間是在2023年。那麼設想一下在沒有分布式檔案系統的情況下,我們需要儲存檔案的大小超過磁碟的大小該如何做?對應的解決方案就是raid技術。

raid技術是將多塊普通磁碟組成乙個陣列,主要是為了改善磁碟的儲存容量、讀寫速度、磁碟的可用性以及容錯性。

簡單理解就是乙個伺服器裡原本只有乙個磁碟,現在加了n塊磁碟。這樣就可以解決檔案大小超過磁碟的問題,而且可以將檔案分成n份併發讀寫。這就是最早的raid0,但是raid0沒有做備份所以只要有一塊磁碟損壞就會破壞資料的完整性。

當然raid技術也一直在改進,在保證了資料的完整性就要使用資料備份,那這樣就會導致磁碟的使用率降低。魚和熊掌不可兼得,如下圖:

其實這就是」垂直伸縮」的擴容方式,通過公升級cpu、記憶體、磁碟等將一台計算機變得更強大。但是在網際網路時代這就行不通了,我們對計算能力以及大規模資料儲存有更高的需求。所以就有了後來的hdfs分布式檔案系統,它採用的是」水平伸縮」,通過新增更多的伺服器來實現更高的計算能力以及大資料儲存。

大資料的發展也有十幾年了,各種技術也是層出不窮,計算框架、演算法也是在不停的迭代更新。

大資料所有的一切都是圍繞資料來展開,hdfs作為最早的大資料儲存系統,各種新的計算框架和演算法想要得到廣泛的應用,就必須支援hdfs才能獲取裡面的資料。所以大資料越發展就越離不開hdfs。hdfs不是最好的大資料儲存技術,但依然是最重要的大資料儲存技術。

ok,前面的鋪墊已經夠多了,現在我們就來聊聊王者hdfs的架構原理,還是得從官網扒張最經典的圖,如下:

從上面可以看出關鍵元件就是兩個,乙個是datanode,乙個是namenode.

hdfs具有主從架構,hdfs集群由單個namenode,乙個管理檔案系統命名空間的主伺服器和管理客戶端對檔案的訪問組成。此外,還有許多datanode,通常是群集中每個節點乙個,用於管理連線到它們執行的節點的儲存。

hdfs公開檔案系統命名空間,並允許使用者資料儲存在檔案中。在內部,檔案被分成乙個或多個塊,這些塊儲存在一組datanode中。namenode執行檔案系統命名空間操作,如開啟,關閉和重新命名檔案和目錄。它還確定了塊到datanode的對映。datanode負責提供來自檔案系統客戶端的讀寫請求。

接下來,再看下hdfs是如何做到高可用的。

下面這張圖是資料塊多份複製儲存的示意,圖中對於檔案 /users/sameerp/data/part-0,其複製備份數設定為 2,儲存的 blockid 分別為 1、3。

block1 的兩個備份儲存在 datanode0 和 datanode2 兩個伺服器上

block3 的兩個備份儲存 datanode4 和 datanode6 兩個伺服器上,上述任何一台伺服器宕機後,每個資料塊都至少還有乙個備份存在,不會影響對檔案 /users/sameerp/data/part-0 的訪問。

DayTen 依舊是筆記呀

c 中讀取一整行資料時,可以採用string類庫中的getline 函式 具體使用 getline cin,str 這樣讀入的資料就是包含輸入的空格,方便後續的操作。以下這一點 可以將輸入的字元按空格分割放入棧中 stack stk string str getline cin,str string...

見微知著 依舊是矩陣乘法演算法!

博主上大二了,接觸linux自我認為還是乙個有小小追求的人,覺得一直漂浮在上層沒有根基,於是還是想看看linux核心,便重新看是看pointers on c紮實c語言基礎。不再急功近利,不再認為看完書就學到了知識,實踐出真知,自己動手才是王道。不多說,就用乙個以前我寫過的例子嘲諷以前的我吧!還是一樣...

概念,依舊是概念 csproj檔案是做什麼用的?

本來今天是在寫一篇關於linq的文章,不過寫著寫著忽然覺得有些找不著北的感覺,似乎有點過於發散了?於是來逛了一下,正好發現有朋友發了一篇文章 net面試題,看看你的水平 於是就在這篇文章裡和目前正紅火的小包子同學為某個問題進行了一番爭論。而在吵吵鬧鬧的過程中看到這麼一句話 pdb檔案需要放在debu...