Java架構師趣談Hbase之宏觀架構


相關文章

五分鍾輕松了解Hbase列式存儲

Hbase給初學者的“下馬威”

Hbase王國游記之:Hbase客戶端API初體驗


👉§團結力量大

原始社會,由若干血緣相近的宗族、氏族結合起來集體生活,這就是
部落。最高首領就是酋長,此外還可能會有軍事首領,他們一起繁衍生息。

到了原始社會末期,頻繁戰爭,若干個親近的或有共同利益的部落,結成暫時的或永久的
聯盟,一起去和別人PK,這就是部落聯盟

部落聯盟的性質和部落相同,它們也有最高首領,權利機關等。中國古籍記載的黃帝、蚩尤,以及堯、舜、禹都是部落聯盟的首領。

通過這個事情,至少記住兩點:第一個是團結力量大。這很顯然。第二個是外交上比較有名的一句話,“沒有永恆的敵人,只有永恆的利益”。

👉§把部落搬進計算機

計算機的歷史才幾十年而已,與人類社會相比,那是貨真價實的“后生”。雖然現在計算機已經很厲害了,但是單台的能力總是有上限的。

原始社會都知道團結力量大,那就讓計算機團結起來吧。把若干台計算機通過網絡結合起來,就形成了
計算機界的部落(或部落聯盟)。

我們也要選出一台計算機當“酋長”啊,於是被選出來的那一台通常稱為
Master節點,剩余的稱為Slave節點。就是我們常說的Master/Slave。但是Slave有奴隸的意思,會被一些國家反對,所以就有了另外一套叫法,Leader/Follower,中文稱為/

這個計算機界的部落就稱為
集群

👉§Hbase集群

Hbase的設計目標就是海量存儲能力,所以它必須是一個
集群。它的“酋長”就稱為Master節點,剩余的每個節點就稱為Region Server

酋長為了更好地管理本部落人員,一般還會設置一個最高
軍事首領,來輔助自己。可以理解為我們常說的軍師

Hbase集群也有自己的“軍師”,它就是
ZooKeeper。ZooKeeper本身也是一個集群

酋長這個角色是很重要的,一旦戰死,整個部落將
群龍無首,容易內訌,所以必須立馬再選出一個酋長。

酋長需要具有很強的能力,不是誰都能當的。所以平時需要一個
后備酋長時時刻刻候着,以防不測。其實就是個備胎。

所以Hbase中正常的那個Master節點稱為
Active Master節點,至少還有一個后備的Master節點稱為Backup Master節點。這兩個Master節點之間經常互通有無,保持信息一致



一旦這個Active Master節點英勇就義后,由“軍師”ZooKeeper負責從Backup Master節點中選出一個成為新的老大。因為它本來就是后備待命狀態,所以一上來就可以接替工作,沒有“實習期”的。

Master節點主要負責
管理類的工作,其余的Region Server節點則主要負責干活了,如數據的讀/寫等。

👉§化整為零

Hbase是以行的形式實現面向列的存儲,其實還是
行存。能夠支持數十億行,可見它是一個非常長的表。

實際生活中,超長物體的加工、運輸都很麻煩,所以人們就
截成一段一段的,分段處理好,最后再拼接到一起。

采用相同的方法,把Hbase的超長表分成若干段,每一段稱為一個
Region。相當於傳統關系型數據庫的橫向分表



所有的Region拼接起來就形成了Hbase中的一個完整表。就像所有車廂拼接起來就形成了一列完整的列車一樣。

Hbase是面向列的,所以在存入一行數據時,
某些列族可以完全沒有數據。比如一個剛畢業的學生就沒有工作經歷,那工作經歷這個列族就是空的。

可見列族與列族之間的
差別有時非常大,所以存儲時也是分開的,即一個列族一個存儲,把這個存儲稱為Store

所以一個Region里可以有
一到多個Store。




👉§存儲結構

Hbase集群中負責實際數據工作的是很多的
Region Server服務器。每個表從邏輯上被切分為很多Region

很明顯最后要把這些
Region分配到這些Region Server服務器上,這個分配的工作是由Master節點完成的。



Hbase的設計目標就是要支持實時的讀寫。所以寫入的速度必須要快,還有個隱形的前提就是數據也要安全才行。

數據寫入
內存的速度非常快(想想Redis),但只有寫入磁盤才算安全。

一個Region Server上有很多Region,如果有大量並發寫入,這些數據最終落到磁盤上的不同位置上,光磁頭
來來回回的尋道時間就是一個非常大的開銷。剩下的就是實際寫數據的時間了。

👉§如何優化

復制或刪除很多小文件時,非常耗時。如果把它們打包成一個壓縮文件,再復制或刪除,會快很多。

所以可以通過
減少寫入的文件個數來優化。如果我們只寫一個文件,且每次都在文件末尾追加,這應該最大限度的減少了磁頭的移動。

這種方式在Hbase中叫做
預寫日志,即Write Ahead LogWAL)。所有的寫入操作只要把數據追加到這個日志文件中就立即返回。

一個Region Server服務器只有
一個這樣的WAL文件,被服務器上的所有Region以及它里面的所有Store共享

預寫日志的數據格式並不適合進行最終的存儲,所以在Store里面還有一個
MemStore這樣的數據結構駐留在內存里,會收集所有寫入的數據,且按row key已排序



當某些條件被滿足時,MemStore中的數據會被flush到磁盤上進行持久化,最終這些數據以StoreFile的形式存儲到HDFS中。



PS:本文中部分圖片來自於網絡,如有侵權請告知。



(完)


編程新說


用獨特的視角說技術


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM