Hbase rowkey熱點問題

2021-06-22 18:50:05 字數 1549 閱讀 8526

當處理由連續事件得到的資料時,即時間上連續的資料。這些資料可能來自於某個感測器網路、**交易或者乙個監控系統。它們顯著的特點就是

rowkey

中含有事件發生時間。帶來的乙個問題便是

hbase

對於row

的不均衡分布,它們被儲存在乙個唯一的

rowkey

區間中,被稱為

region

,區間的範圍被稱為

start key

和end key

。對於單調遞增的時間型別資料,很容易被雜湊到同乙個

region

中,這樣它們會被儲存在同乙個伺服器上,從而所有的訪問和更新操作都會集中到這一台伺服器上,從而在集群中形成乙個

hot spot

,從而不能將集群的整體效能發揮出來。

要解決這個問題是非常容易的,只需要將所有的資料雜湊到全部的

region

上即可。這是可以做到的,比如,在

rowkey

hash

雜湊

您可以使用乙個

hash

字首來保證所有的行被分發到多個

region

伺服器上。例如:

byte prefix =

(byte) (long.hashcode(timestamp) % );

byte rowkey =

bytes.add(bytes.tobytes(prefix), bytes.tobytes(timestamp);

這個公式可以產生足夠的數字,將資料雜湊到所有的

region

伺服器上。當然,公式裡假定了

region

伺服器的數目。如果您打算後期擴容您的集群,那麼您可以把它先設定為集群的整數倍。生成的

rowkey

類似下面:

0myrowkey-1,

1myrowkey-2, 2myrowkey-3, 0myrowkey-4, 1myrowkey-5, \

2myrowkey-6, …

當他們將按如下順序被傳送到各個

region

伺服器上去:

0myrowkey-1

0myrowkey-4

1myrowkey-2

1myrowkey-5 …

換句話說,對於

0myrowkey-1

和0myrowkey-4

的更新操作會被傳送到同乙個

region

伺服器上去(假定它們沒有被雜湊到兩個

region

上去),

1myrowkey-2

和1myrowkey-5

會被傳送到同一臺伺服器上。

這種方式的缺點是,

rowkey

的範圍必須通過**來控制,同時對資料的訪問,可能要訪問多台

region

伺服器。當然,可以通過多個執行緒同時訪問,來實現並行化的資料讀取。這種類似於只有

map的

mapreduce

任務,可以大大增加

io的效能。

Hbase熱點問題

當處理由連續事件得到的資料時,即時間上連續的資料。這些資料可能來自於某個感測器網路 交易或者乙個監控系統。它們顯著的特點就是rowkey中含有事件發生時間。帶來的乙個問題便是hbase對於row的不均衡分布,它們被儲存在乙個唯一的rowkey區間中,被稱為region,區間的範圍被稱為start k...

Hbase熱點問題

需求描述 掃瞄 查詢 某個區間 列用hbase多節點的資源,分布式掃瞄,加快速度 然後拼接到一起 如何打散資料 冠字型大小逆序,hash 並不一定資料連續就會造成熱點,這個是由資料訪問模式決定的。ex 時間作為rowkey,但查詢經常按乙個時間段來查詢 時間作為rowkey會造成時間差不多的在乙個r...

redis熱點問題

請求分片集中,超過單 server 的效能極限。在服務端讀資料進行訪問時,往往會對資料進行分片切分,此過程中會在某一主機 server 上對相應的 key 進行訪問,當訪問超過 server 極限時,就會導致熱點 key 問題的產生。需要避免失效那一刻大量請求同時去重新構建快取。因為重新構建快取,需...