天天看點

HBase - 建表語句解析

像所有其他資料庫一樣,HBase也有表的概念,有表的地方就有建表語句,而且建表語句還很大程度上決定了這張表的存儲形式、讀寫性能。比如我們熟悉的MySQL,建表語句中資料類型決定了資料的存儲形式,主鍵、索引則很大程度上影響着資料的讀寫性能。雖然HBase沒有主鍵、索引這些概念,但在HBase的世界裡,有些東西和它們一樣重要!

廢話不說,直接奉上一條HBase建表語句,來為各位看官分解剖析:

上述建表語句表示建立一個表名為“NewsClickFeedback”的表,該表隻包含一個列簇“Toutiao”。接下來重點講解其他字段的含義以及如何正确設定。Note:因為篇幅有限本文并不講解具體的工作原理,後續會有相關專題對其進行分析。

VERSIONS 

資料版本數,HBase資料模型允許一個cell的資料為帶有不同時間戳的多版本資料集,VERSIONS參數指定了最多儲存幾個版本資料,預設為1。假如某個使用者想儲存兩個曆史版本資料,可以将VERSIONS參數設定為2,再使用如下Scan指令就可以擷取到所有曆史資料:

BLOOMFILTER

布隆過濾器,優化HBase的随機讀取性能,可選值NONE|ROW|ROWCOL,預設為NONE,該參數可以單獨對某個列簇啟用。啟用過濾器,對于get操作以及部分scan操作可以剔除掉不會用到的存儲檔案,減少實際IO次數,提高随機讀性能。Row類型适用于隻根據Row進行查找,而RowCol類型适用于根據Row+Col聯合查找,如下:

Row類型适用于:get ‘NewsClickFeedback’,’row1′

RowCol類型适用于:get ‘NewsClickFeedback’,’row1′,{COLUMN => ‘Toutiao’}

對于有随機讀的業務,建議開啟Row類型的過濾器,使用空間換時間,提高随機讀性能。

COMPRESSION

資料壓縮方式,HBase支援多種形式的資料壓縮,一方面減少資料存儲空間,一方面降低資料網絡傳輸量進而提升讀取效率。目前HBase支援的壓縮算法主要包括三種:GZip | LZO | Snappy,下面表格分别從壓縮率,編解碼速率三個方面對其進行對比:

Snappy的壓縮率最低,但是編解碼速率最高,對CPU的消耗也最小,目前一般建議使用Snappy

TTL

資料過期時間,機關為秒,預設為永久儲存。對于很多業務來說,有時候并不需要永久儲存某些資料,永久儲存會導緻資料量越來越大,消耗存儲空間是其一,另一方面還會導緻查詢效率降低。如果設定了過期時間,HBase在Compact時會通過一定機制檢查資料是否過期,過期資料會被删除。使用者可以根據具體業務場景設定為一個月或者三個月。示例中TTL => ‘ 259200’設定資料過期時間為三天

IN_MEMORY

資料是否常駐記憶體,預設為false。HBase為頻繁通路的資料提供了一個緩存區域,緩存區域一般存儲資料量小、通路頻繁的資料,常見場景為中繼資料存儲。預設情況,該緩存區域大小等于Jvm Heapsize * 0.2 * 0.25 ,假如Jvm Heapsize = 70G,存儲區域的大小約等于3.2G。需要注意的是HBase Meta中繼資料資訊存儲在這塊區域,如果業務資料設定為true而且太大會導緻Meta資料被置換出去,導緻整個叢集性能降低,是以在設定該參數時需要格外小心。

BLOCKCACHE

是否開啟block cache緩存,預設開啟。

SPLITS

region預配置設定政策。通過region預配置設定,資料會被均衡到多台機器上,這樣可以一定程度上解決熱點應用資料量劇增導緻系統自動split引起的性能問題。HBase資料是按照rowkey按升序排列,為避免熱點資料産生,一般采用hash + partition的方式預配置設定region,比如示例中rowkey首先使用md5 hash,然後再按照首字母partition為16份,就可以預配置設定16個region。

本文轉載自:http://hbasefly.com

<a href="http://hbasefly.com/2016/03/23/hbase_create_table/" target="_blank">原文連結</a>