HBase一次慢查詢請求的問題排查與解決過程

2021-09-02 03:02:40 字數 950 閱讀 1614

專案中有一張hbase表,每天凌晨以後會集中批量匯入一批資料,匯入資料量很大,在千萬到億的量級,然後白天為使用者提供查詢服務。某天突然發現, 該錶按照各個region(共計256個)分別僅順序scan少數幾條資料時,部分region的查詢請求的響應時間很慢,長達10秒甚至幾十秒不等。

首先,通過檢視hbase的region server監控介面,看到這張表的每個region下面只有1~3個storefile,排除了由於storefile過多導致查詢響應慢的情況。

接著排查,發現這張表的ttl只有5天,因此到一定程度後會有大量過期資料存在。同時,由於這張表每天早上會匯入一批資料(其中,發現問題的5天前那天曾集中匯入了7億多條記錄),而集群的major compact週期配置是7天,雖然到當天時這部分資料已經過期了,但是由於還沒有經過major compact觸發清除所有過期的資料,因此,這個時間視窗內存在大量過期但尚未被清除的資料,導致即使按照各個region分別僅scan少數幾條資料,仍需要過濾掉一大批過期的資料(從監控看到當時的block cache訪問量比平時要高了一倍左右,如下圖所示),才能掃到實際有用的資料,所以查詢響應時間很慢。

針對這一問題,有以下兩種解決方法:

1)每天早上匯入資料後,強制觸發一次major compact操作(見hbaseadmin的majorcompct方法,非同步執行),使得表中每個region中的過期資料可以被及時清除掉。

2)由於集群的major compact週期為7天,而表的ttl為5天,因此可以將major compact週期調小(配置引數為hbase.hregion.majorcompaction,單位為毫秒;同 時,hbase.offpeak.start.hour可以設定major compact啟動的小時,例如,設定為1,可保證在1點後觸發),從集群級別保證major compact盡早觸發執行。

HBase一次慢查詢請求的問題排查與解決過程

以下是我們對hbase集群一次慢查詢請求問題的排查解決過程。專案中有一張hbase表,每天凌晨以後會集中批量匯入一批資料,匯入資料量很大,在千萬到億的量級,然後白天為使用者提供查詢服務。某天突然發現,該錶按照各個region 共計256個 分別僅順序scan少數幾條資料時,部分region的查詢請求...

HBase一次慢查詢請求的問題排查與解決過程

出自 最近hbase集群遇到過一次慢查詢請求的問題,下面是對這一問題的具體描述及排查解決過程。專案中有一張hbase表,每天凌晨以後會集中批量匯入一批資料,匯入資料量很大,在千萬到億的量級,然後白天為使用者提供查詢服務。某天突然發現,該錶按照各個region 共計256個 分別僅scan少數幾條資料...

HBase一次慢查詢請求的問題排查與解決過程

最近hbase集群遇到過一次慢查詢請求的問題,下面是對這一問題的具體描述及排查解決過程。專案中有一張hbase表,每天凌晨以後會集中批量匯入一批資料,匯入資料量很大,在千萬到億的量級,然後白天為使用者提供查詢服務。某天突然發現,該錶按照各個region 共計256個 分別僅scan少數幾條資料時,部...