大數據培訓_W HBase 高級用法之行健設計
發布時間:
2019-05-30 14:30:04
大數據培訓_W HBase 高級用法之行健設計
1.熱點問題
寫入要分散,減少region的熱點問題。
例如: 歷史交易訂單,一般生成的訂單號都是通過時間戳+隨機的4位數字組成,可以讓訂單號倒序。這樣rowkey是訂單號的倒序存儲,減少集中存儲到某個region。
例如:用戶上網流量存儲到Hbase,一般是讓手機號作為hbase的rowkey。由于手機號的后四位是隨機的??梢宰屖謾C號倒序排序作為hbase的rowkey。
思考問題:
直接將時間戳作為行健, 在寫入單個 region 時候會發生熱點問題,為什么?
回答: 直接使用時間戳會引發單個region的熱點問題。
HBase的rowkey在底層是HFile存儲數據的,以<K,V>鍵值對存放到SortedMap中。并且region中的rowkey是有序存儲,若時間比較集中。就會存儲到一個region中,這樣一個region的數據變多,其它的region數據很好,加載數據就會很慢。直到region分裂可以解決。
2.行健設計
在HBase中有兩類基本的鍵結構:行健和列鍵
這兩者都存儲著有意義的信息,不僅僅是該鍵對應的值:
列鍵:包括了列族名和限定符,定位到列的索引
行?。合喈斢陉P系型數據庫中的主鍵,通過行健得到邏輯布局中一行的所有列
邏輯上用戶設置的每一行都沒放在一起,但是實際存儲的時候每個列族的以單獨的文件存儲的,不同列族的單元格絕對不會出現在同一個StoreFile中。同時,HBase也不會存儲值為空的單元格,所以磁盤上的文件也只有這些有值的單元格。
每個單元格在實際存儲的時候也保存了行健和列鍵,所以每個單元格都單獨存儲了它在表中所處位置的關鍵信息。
同一個單元格的不同版本被單獨存儲為連續的單元格,單元格按照時間戳降序排列,所以默認讀取的是最新的單元格數據。
同一列族的單元格在存儲的時候先按行健排序,當一行中有多個單元格的時候再按列鍵排序,同一單元格有多個版本的時候按時間戳排序
根據以上的存儲特性,建議在查詢的時候指定列族信息可以有效減少查詢的存儲文件,提高效率
3.行鍵設計的關鍵要點
(1)存儲方式:磁盤上一個列族下所有的單元格都存儲在一個存儲文件(store file)中,不同列族的單元格不會出現在同一個存儲文件中。
(2)NULL 不會存儲在HBase表中。
(3)每個單元格在實際存儲時也保存了行健和列鍵,即單獨存儲了它在表中所處位置的相關信息。
(4)同一個單元格的多個版本被單獨存儲為連續的單元格,單元格按照時間戳降序排列。故在HFile讀取時候,最新的值先被讀到。
(5)單元格的KeyValue內容:行健、列族、列限定符、時間戳、值。KeyValue存儲先按照行健排序,再按列鍵排序。
(6)對于KeyValue,篩選的效率從左到右變差:行健、列族、列限定符、時間戳、值。故而盡量將重要的篩選信息左移。
上一篇:
Java培訓_Java NIO的緩沖區介紹
下一篇:
Python培訓_Python開發環境搭建