最近在了解hbase,寫點學習筆記方便自己梳理知識邏輯,也同大家有些交流,希望也能幫到同樣剛入門學習的新手,快速地了解其知識背景。因為很多專業詞彙我不知其中文對應,所以就不翻譯了,其實我認為有些詞彙從中文看反而難以理解,英文更能讓你快速get到其concept真正的意思。
1.hbase特點
首先要從什麼是hbase,為什麼要hbase?
一句話的話:非關係型資料庫。
但為什麼需要他,因為它
a.支援linear and modular scaling.
b. 自動sharding: 就是說隨著你的資料增長,tables不斷變大,hbase會自動把tables split到不同的regions,然後把regions分布到集群多台伺服器中。
c... 後面不重要(又不是學文科,背課文)
相比較傳統的rdbms,hbase缺少了typed columns, secondaryindexes, triggers, 和高階query語言。
什麼時候用hbase:
a. big data. 要足夠大,有數以千萬以億計rows。
b. 確定在你的處理資料中,那些相比較rdbms確實的功能特點不重要。
c. 足夠多的hardware. hbase用hdfs作為persistence store. hdfs本身也又有3備份的特性,所以要有足夠的datanodes。當然我們在個人學習中是可以用單機模擬分布式集群的。
題外:hbase 和hdfs的區別
hdfs就是分布式檔案系統,其目的是為了在集群中儲存大檔案,並不支援快速地查詢。hbase因為通過把record按照key-value的形式來存放,所以支援快速查詢,但它資料本身的儲存仍然要依靠hdfs。後面的內容會說明hbase是怎麼做到快速lookup,通過這個過程也就了解了整個hbase的設計理念。
2. data model
hbase的目的是為了儲存大tables同時能夠在tables中快速索引。既然資料都是按照tables儲存的,也就自然有行有列。
先用一句話明確中心:整個table可以看成多維map,通過row key,columnkey 和timestamp,map到乙個value,在這裡也就是an interpredted arrayof bytes.
row:
乙個行由乙個rowkey和很多個column組成。整個table很多個rows,這些row按照rowkey的「字母「順序排序。(這裡就可以看出,hbase的rowkey設計是很重要的,你可以根據自身需要,把類似rows通過rowkey的設計使它們聚集在一起,這樣你在range query時很容易快速讀取。舉個例子,比如你有個城市計程車的資料集,假設你的應用要求是快速query乙個區域內一段時間的計程車訂單記錄。比如我想知道2018.01.10 12am-12.30am,以上海博物館為出發地的訂單, 假設上海博物館的地理座標為121.482, 31.233 那麼你的rowkey就可以設計為12148231233201801101200
,12148231233201801101201...
。這樣rangequery
時只需要很少的
io,可能只需要訪問幾個
blocks
就可以讀出所有符合條件的
rows)
。columns
:hbase
中的column
就由columnfamily
和column qualifier
組成,即
column= columnfamily
:column qualifier
。columnfamily:
用來協同一些columns和他們的對應value,為了更好的performance。因為每個column family可以規定自己的儲存特性,比如對應的value是不是應該存在記憶體,是不是要壓縮等等。有了column family,我們可以很方便地根據自身需要設計管理幾行columns。注意,每個table的column families都是固定的,也就是新建這個表時,就已經規定好,並且每行的column family都一樣,當然一些rows可能的一些column families可以是空的。從儲存的角度上看,所有的columnfamily member都是儲存在一起的,也就是「列儲存」。
column qualifier
在column family中,用來對一些資料提供index。有了column family,再用column qualifier進行細分。不同於整個table,每個row的column family都是固定的,一樣的,qualifier可以每個row根據需要而不同。也就是說每個row對應的column個數是不定的,但這些columns組成的 column families是固定的。
cell:
由rowkey+column family+column qualifier+timestamp組成的是cell,注意,不能簡單把cell理解為row,因為每個cell中的乙個value可能對應著多個版本。回到上面計程車的例子,一條行車記錄中有乙個column叫做track,用來記錄計程車的形式路線,假如說1分鐘獲取一次位置,那麼就會產生很多value,叫做cell.value, 每個value對應著以1分鐘為增幅的timestamp,。 但是整條行車記錄是乙個cell。
timestamp
每個value對應著乙個timestamp,系統預設的是資料寫入時,regionserver的時間作為timestamp,當然也可以根據自身需要而修改。
從這兩圖中加深理解。通過rowkey+column failmies + quailifiers+timestamp map到乙個value。也就是key-value的意思,這裡key可以如下圖不同組合,這樣返回的value也就不同。
到此,我們就清楚了hbase要處理和儲存的big tables是什麼樣子的。下面接著看,hbase是如何做到去儲存和處理這些big tables的。
3.hbase架構
上圖就是hbase的整體組成。
hregion: 我們的集群裡會有很多tables,每個tables被分成多個hregion,每個hregion就對應著我們前面提到的一段範圍內的column family所對應的資料。初始狀態下,每個table只有乙個hregion。隨著資料的增長,hregion會split成更多的子hregion,預設的情況下,每個hregion大概100~200mb。
hregionserver:每個table被分成了很多個hregion,而這些hregion存在**呢,就是hregionserver,也就是我們集群中的每個節點機器。當然每個hregionserver可以管理多個hregion,這些hregion可以來自多個不同的table。其實hregionserver擔任著整個系統「執行者」的角色,是真正幹活。hregionserver負責處理對它所管理的所有hregion的讀寫請求。負責region變大後的spilt,負責storefile的合併工作,已經儲存資料到hdfs。
hmaster:現在我們知道了table被分成hregions,然後hregions被分到hregionservers上管理。hmaster就擔任著分配hregions到hregionservers的角色。 這就意味著它需要時刻注視著整個集群的情況,比如hregionservers的新新增或失效(也就是新增乙個節點機器或者其失效),確保hregionservers的均衡負載等等。當然我們需要用hmaster對table做些基本的修改操作,比如建立表和column family。
client:hbase client顧名思義,可以理解為我們使用者的角色了。client可以直接query catalog tables 去獲得我們想讀的那段regions所在的位置,也就是所在的hregionserver, 所以這個過程是不用通過hmaster的。
catalog tables(.mata):
這張表就是列出了system中所有的regions,我們可以通過它了解我們的table都被分了那些regions,而這些regions又實際存在那些region servers中。catalog tables也叫做 .meta。catalog tables本身就如同其它hbase的table一樣,它也是個table,通過hbase shell命令中list獲得,儲存路徑在zookeeper中。
catalog tables也是table,只不過存的是hregion的資訊,所以每row的key就是由table,region start key,region id組成,對應的value就是hregion的具體資訊,如圖第二個info:server就是hregion所在的hregionserver。
HBase基礎概念
非關係型分布式列式資料庫,支援大資料量查詢 百萬,上億行 結合二三即可 雖然hbase資料儲存在hdfs上,但查詢資料的速度區別很大 1.也叫目錄表 hbase meta 用於儲存所有region資訊 2.存放在zookeeper中,預設路徑是 hbase meta region server 終端...
Spark基礎概念梳理
因為最近在學習與使用spark,所以對一些基礎概念與術語做一些梳理。用來加深映像同時方便後續複習 spark是乙個基於記憶體的分布式計算框架,可無縫整合於現有的hadoop生態體系。主要包括四大元件 spark streaming spark sql spark mllib和spark graphx...
高階演算法 基礎概念梳理
1 整合學習 整合方法是將幾種機器學習技術組合成乙個 模型的元演算法,以達到減小方差 偏差或改進 的效果,通過弱學習器組合成強學習器。序列整合方法 adaboost,gbdt,模型之間強依賴 並行整合方法 隨機森林,模型之間無依賴 2 個體學習器 個體學習器整合學習的單元學習器,是整合學習的基礎學習...