HBase查詢優化

2021-08-22 07:21:56 字數 1572 閱讀 9677

1.概述

hbase是乙個實時的非關係型資料庫,用來儲存海量資料。但是,在實際使用場景中,在使用hbase api查詢hbase中的資料時,有時會發現資料查詢會很慢。本篇部落格將從客戶端優化和服務端優化兩個方面來介紹,如何提高查詢hbase的效率。

2.內容

這裡,我們先給大家介紹如何從客戶端優化查詢速度。

2.1 客戶端優化

客戶端查詢hbase,均通過hbase api的來獲取資料,如果在實現**邏輯時使用api不當,也會造成讀取耗時嚴重的情況。

2.1.1 scan優化

在使用hbase的scan介面時,一次scan會返回大量資料。客戶端向hbase傳送一次scan請求,實際上並不會將所有資料載入到本地,而是通過多次rpc請求進行載入。這樣設計的好處在於避免大量資料請求會導致網路頻寬負載過高影響其他業務使用hbase,另外從客戶端的角度來說可以避免資料量太大,從而本地機器傳送oom(記憶體溢位)。

預設情況下,hbase每次scan會快取100條,可以通過屬性hbase.client.scanner.caching來設定。另外,最大值預設為-1,表示沒有限制,具體實現見源**:

複製**

/**

* @return the maximum result size in bytes. see

*/ public long getmaxresultsize()

/**

* set the maximum result size. the default is -1; this means that no specific

* maximum result size will be set for this scan, and the global configured

* value will be used instead. (defaults to unlimited).

* * @param maxresultsize the maximum result size in bytes.

*/ public scan setmaxresultsize(long maxresultsize)

複製**

一般情況下,預設快取100就可以滿足,如果資料量過大,可以適當增大快取值,來減少rpc次數,從而降低scan的總體耗時。另外,在做報表曾顯時,建議使用hbase分頁來返回scan的資料。

2.1.2 get優化

hbase系統提供了單條get資料和批量get資料,單條get通常是通過請求表名+rowkey,批量get通常是通過請求表名+rowkey集合來實現。客戶端在讀取hbase的資料時,實際是與regionserver進行資料互動。在使用批量get時可以有效的較少客戶端到各個regionserver之間rpc連線數,從而來間接的提高讀取效能。批量get實現**見org.apache.hadoop.hbase.client.htable類:

複製**

public result get(list gets) throws ioexception ;

} try {

object r1 = new object[gets.size()];

batch((list

Hbase查詢效能優化

hbase雖然能提供海量資料的實時讀寫,但是一旦資料量非常大,查詢延遲也會非常高,所以要做好優化工作。1 列族越少越好 1 列族 cf 數量,在記憶體結構中乙個cf對應乙個store區域,乙個store中又存在多個storefile小檔案,小storefile是不斷合併新的大的storefile,資...

hbase 按時刻查詢 HBase讀寫優化

乙個系統上線之後,開發和調優將一直貫穿系統的生命週期中,hbase也不列外。這裡學習下hbase的調優。hbase查詢優化 作為nosql資料庫,增刪改查是其最基本的功能,其中查詢是最常用的一項。設定scan快取 hbase中scan查詢可以設定快取,方法是setcaching 這樣可以有效的減少服...

hbase資料讀取優化 HBase效能優化 總結篇

1 hbase.hregion.max.filesize應該設定多少合適 預設值 256m 說明 maximum hstorefile size.if any one of a column families hstorefiles has?grown to exceed this value,th...