8/23今天參加了NoSQL Taiwan的活動
http://registrano.com/group/nosql-taiwan
想要了解HBASE很久了,無意間看到這個活動,毫不猶豫的報名了!
第一次參加這樣的活動,感覺真的相當棒!!之後有類似的活動都必定會報名的!
HBASE--Hadoop Database,用於超大型分散式資料庫,屬於Big Data資料庫方案
整個硬體環境主要由Zookeeper Server、Master Server、Region Server構成,資料主要儲存在Region Server。
資料存儲是在Region Server,Region Server可建立多個Region存放資料,Region可以說是HBASE的靈魂,HBASE能夠分散到不同機器就是利用Region的特性,存儲資料的時候,所有的資料都會散到不同的Region,要取資料的時候,再透過Master得知這個ID存放在哪個Region,如果Region的Size太大,則將會自動拆分出來。
Region裡面可以建立數個ColumnFamily (簡稱CF),每個CF會具備一個MemoryStore (MemStore),全部的資料異動會先存放在MemStore,累積到一個Size就會Flush到StoreFile (HFile),在還沒Flush到Hfile之前,資料都是危險的,出問題將會導致在MemStore的資料消失,有保留的地方就是Write Ahead Log,MemStore的Size大小則透過參數設定,每次的Flush都會產生一個HFile,HFile的數量多到一個程度,就會進行合併(Compaction) HFile,HFile的大小,可透過參數設定。
HBASE的資料由鍵和值組成,透過 Key/Value的方式儲存,有點像是Heap,異動的資料不會直接覆蓋也不會刪除,而是持續的增加資料,始終會保持鍵值的排序(字典排序法),資料裡面會包含版別,保留的版本數則透過參數設定,可以透過指令指定取回前次的資料,假設設定10個版本,則最多會保留前面10次的異動,刪除資料則是增加一筆刪除註記。
Spilt/Compaction是造成HBASE效能瓶頸的兇手,每當有一個CF的HFile需要Spilt/Compaction的時候,那個CF所屬的Region就必須要Offline進行Spilt/Compaction,而進行的不只是那個CF,而是處於相同Region下的全部CF都被強迫進行Spilt/Compaction,即使是還不需要進行的CF,因此一個Region最多就只能2~3個CF,超過這個數量將會嚴重影響HBASE的效能,就連官方也在網站承認。
MemStore每次Flush的Size大小設定、HFile的Size大小、檔案數量設定,決定了Spilt/Compaction的次數,進而影響HBASE的效能,HFile的Size設定太小易Spilt,太大易Compation,這決定在於使用資料庫的需求是讀多,還是寫多,來設定。
資料IO流程大約為:
資料庫異動 → MemStore → MemStore > 64M ? → StoreFile → HFile數量 > 3 ? → Compaction → Region > 10G ? → Spilt Region
Transaction
HBASE沒有RDB強大的Transaction,僅能Single Row Transaction
Row atomic、Row Lock、Same Row,Same File、Durability
Schema設計
使用HBASE時,在Schema設計上,要避免需要Join的狀況,盡量將資料都塞在同一個Row
0 意見:
張貼留言