hbase使用總結
1、 使用壓縮儲存
hbase用於大規模的資料管理,資料一般會達到tb級,量級一般會達到billion級,如果不採用壓縮模式管理資料會大大的增加hdfs的儲存及namenode的管理壓力,lzo壓縮是hdfs支援的壓縮格式,可以將資料壓縮到50%左右,並且壓縮和解壓速度相比zip等模式要快。在hbase使用lzo壓縮前需要做以下準備:
1、 安裝lzo-2.04-1.el5.rf.x86_64.rpm和lzo-devel-2.04-1.el5.rf.x86_64.rpm
2、 將lzo的jar包hadoop-lzo-0.4.10.jar複製到hbase安裝目錄的lib下
3、 建立hbase表時在列簇的配置中加入compression=> 'lzo'
通過以上的配置就可以採用lzo格式壓縮表中儲存的資料,解壓速度快有利於查詢速度的提高。
2、 表的儲存設計
hbase表的構成有以下幾個部分:
1、 row key: 行鍵,table的主鍵,table中的記錄按照row key字典排序排序
2、 column family:列簇,table在水平方向有乙個或者多個columnfamily組成,列簇不可以動態新增,列簇是資料的集中儲存單元,乙個列簇不會被分割。
3、 column:列,列是列簇的子集,乙個列簇中可以動態擴充套件多個列,因為列具有動態擴充套件的能力,因此設計表時,盡量考慮將具有共同特性的列集中到乙個列簇管理,一方面可以方便檢索,通過指定列簇將所有的列按照整體取出。另一方面可以加快檢索速度,只需要檢索乙個region就可以找到所有需要的資料。
4、 timestamp:時間戳,每次資料操作對應的時間戳,可以看做是資料的version number,相同資料的多個時間戳版本按照long型排序,並且具有很高的查詢速度。
6、 time to live(ttl):資料儲存生命週期,設定表中資料的生命週期,超過該週期的資料將被自動刪除。
7、hbase.hregion.max.filesize
:region的最大檔案大小,超過這個配置region將被split,若想減少region被分割的次數應盡量將該值調大,該值可以再配置檔案中做整體配置,同時也可以通過修改單個表的配置進行個性化設定,通過max_filesize 進行設定。
設計時應注意,不要在一張表中定義太多的column family,一方面是分布在多個column family中的資料不利於查詢,另一方面,乙個column family在flush的時候會觸發其他的columnfamily進行flush,這樣會加重io。
注:hbase儲存的抽象化形式
sortedmap>>
3、 資料查詢及操作
一、hbase的查詢操作分為以下幾種:
1、通過rowkey訪問,也就是通常的get操作,可以get單個column的值也可以整個列簇所有列的值
2、通過range的scan在一定的範圍內進行掃瞄,在進行scan是需要進行優化,通過scan caching
來加快scaner的速度,預設情況下scaner是一條一條的對服務端資料進行scan,這個請求次數太多,效率較低,通過scan cache可以一次從服務端拿回指定數量的資料進行scan。注意因為rowkey儲存時是按照字典排序,所有scan出來的資料也是按照字典排序的。
3、通過rowkey,columnfamily,column綜合獲取指定value下的所有版本值,所有的值是按照timestamp進行排序的,可以使用timestamp集合也可以使用value集合,這種查詢的效率是相當高的,以前做個測試取得10w的版本值只需要150ms左右。在做整體的架構時必須考慮這個特性。另外注意hbase的thriftserver中不提供這樣查詢的介面。
4、通過rowkey,column family,column和指定的timestamp獲取指定版本的唯一值。
二、資料處理:
1、資料批量匯入:
在使用hadoop批量匯入時,可以在匯入前預先分配一定量的region,這樣可以加快批量匯入的速度,根據以往的經驗,如果不事先分配,並且匯入的資料是有序的情況下會造成多個任務向乙個region插入資料,這樣會導致匯入速度很慢,沒有發揮hadoop的特性。
2、資料刪除:
hbase資料刪除時有以下特性:
1)當通過rowkey,column family,column刪除乙個值時,這個值將被整體刪除,這樣通過一般的get訪問時資料是訪問不到資料的。當插入新資料並且新資料的timestamp值高於當前時間,那麼get操作會訪問到新的插入值。
2)當通過rowkey,column family,column和指定的timestamp刪除資料時,小於該timestamp的所有版本的值將被認為是刪除,但是通過get訪問是有可能訪問到最新的版本值。也可以通過指定timestamp的範圍取得各個版本的集合。但是這種刪除方式唯一的缺陷就是,當使用相同的timestamp再將這個值插入時,這個timestamp對於的值是無法訪問的。
綜合以上可以分析出,hbase的刪除方式是通過插入一條刪除記錄來標記那些值是被刪除的,刪除操作timestamp的作用是標記小於等於這個timestamp的所有版本被刪除,當進行查詢時需要綜合刪除的記錄來確定那些版本可以返回給使用者,這種判斷方式中刪除記錄有較高的優先順序,這就能夠解釋當使用相同的timestamp再插入刪除的記錄時是不會在被訪問到的。
HBase相關知識
一 hbase資料模型 二 hbase 物理模型 a.table 中所有的行都按照 row key 的字典序進行排列 b.table 在行的方向上分割為多個 region c.region 是按大小分割的,每個表開始只有乙個 region 隨著資料增多,region 不但增大。當增大到乙個閾值時,r...
Hbase儲存相關
hbase 的儲存機制 region 區域 表上的一塊資料 store 邏輯上的列簇 memstore列簇緩衝區 儲存熱資料 最近瀏覽,更新等操作的資料 region server的工作職責 管理region 和 響應io請求 資料可靠性的體現 1 如果乙個region server掛了 寫日誌 h...
hbase的相關元件
hbase的列族 hbase的列族儲存的是相同io屬性的資料,每個檔案對應hdfs上的乙個檔案 在hbase建表時需要指定有多少個列族 對列族進行管理的是hregion hbase的region 假設有個db1表,它有10000行資料,2500行儲存在乙個region裡,region編號 start...