相關文章
👉§團結力量大
原始社會,由若干血緣相近的宗族、氏族結合起來集體生活,這就是部落。最高首領就是酋長,此外還可能會有軍事首領,他們一起繁衍生息。
到了原始社會末期,頻繁戰爭,若干個親近的或有共同利益的部落,結成暫時的或永久的聯盟,一起去和別人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 Log(WAL)。所有的寫入操作只要把數據追加到這個日志文件中就立即返回。
一個Region Server服務器只有一個這樣的WAL文件,被服務器上的所有Region以及它里面的所有Store共享。
預寫日志的數據格式並不適合進行最終的存儲,所以在Store里面還有一個MemStore這樣的數據結構駐留在內存里,會收集所有寫入的數據,且按row key已排序。
當某些條件被滿足時,MemStore中的數據會被flush到磁盤上進行持久化,最終這些數據以StoreFile的形式存儲到HDFS中。
PS:本文中部分圖片來自於網絡,如有侵權請告知。
(完)
編程新說
用獨特的視角說技術