HBase效能優化方法總結(一) 表的設計

2021-07-11 06:39:47 字數 1589 閱讀 3616

本文主要是從hbase應用程式設計與開發的角度,總結幾種常用的效能優化方法。有關hbase系統配置級別的優化,可參考:**ken wu同學的部落格。

下面是本文總結的第一部分內容:表的設計相關的優化方法。

預設情況下,在建立hbase表的時候會自動建立乙個region分割槽,當匯入資料的時候,所有的hbase客戶端都向這乙個region寫資料,直到這個region足夠大了才進行切分。一種可以加快批量寫入速度的方法是通過預先建立一些空的regions,這樣當資料寫入hbase時,會按照region分割槽情況,在集群內做資料的負載均衡。

有關預分割槽,詳情參見:table creation: pre-creating regions,下面是乙個例子:

public

static

boolean createtable(hbaseadmin admin, htabledescriptor table, byte splits)

throws ioexception catch (tableexist***ception e)

}public

static

byte gethexsplits(string startkey, string endkey, int numregions)

return splits;

}

hbase中row key用來檢索表中的記錄,支援以下三種方式:

在hbase中,row key可以是任意字串,最大長度64kb,實際應用中一般為10~100bytes,存為byte位元組陣列,一般設計成定長的

row key是按照字典序儲存,因此,設計row key時,要充分利用這個排序特點,將經常一起讀取的資料儲存到一塊,將最近可能會被訪問的資料放在一塊。

舉個例子:如果最近寫入hbase表中的資料是最可能被訪問的,可以考慮將時間戳作為row key的一部分,由於是字典序排序,所以可以使用long.max_value - timestamp作為row key,這樣能保證新寫入的資料在讀取時可以被快速命中。

不要在一張表裡定義太多的column family。目前hbase並不能很好的處理超過2~3個column family的表。因為某個column family在flush的時候,它鄰近的column family也會因關聯效應被觸發flush,最終導致系統產生更多的i/o。感興趣的同學可以對自己的hbase集群進行實際測試,從得到的測試結果資料驗證一下。

建立表的時候,可以通過hcolumndescriptor.setinmemory(true)將表放到regionserver的快取中,保證在讀取的時候被cache命中。

建立表的時候,可以通過hcolumndescriptor.setmaxversions(int maxversions)設定表中資料的最大版本,如果只需要儲存最新版本的資料,那麼可以設定setmaxversions(1)。

建立表的時候,可以通過hcolumndescriptor.settimetolive(int timetolive)設定表中資料的儲存生命期,過期資料將自動被刪除,例如如果只需要儲存最近兩天的資料,那麼可以設定settimetolive(2 * 24 * 60 * 60)。

HBase效能優化方法總結(一) 表的設計

本文主要是從hbase應用程式設計與開發的角度,總結幾種常用的效能優化方法。有關hbase系統配置級別的優化,可參考 ken wu同學的部落格。下面是本文總結的第一部分內容 表的設計相關的優化方法。預設情況下,在建立hbase表的時候會自動建立乙個region分割槽,當匯入資料的時候,所有的hbas...

HBase效能優化方法總結(一) 表的設計

本文主要是從hbase應用程式設計與開發的角度,總結幾種常用的效能優化方法。有關hbase系統配置級別的優化,可參考 ken wu同學的部落格。預設情況下,在建立hbase表的時候會自動建立乙個region分割槽,當匯入資料的時候,所有的hbase客戶端都向這乙個region寫資料,直到這個regi...

HBase效能優化方法總結(一) 表的設計

本文主要是從hbase應用程式設計與開發的角度,總結幾種常用的效能優化方法。有關hbase系統配置級別的優化,可參考 ken wu同學的部落格。下面是本文總結的第一部分內容 表的設計相關的優化方法。預設情況下,在建立hbase表的時候會自動建立乙個region分割槽,當匯入資料的時候,所有的hbas...