1. 程式人生 > >hbase中單調遞增的rowkey造成的影響

hbase中單調遞增的rowkey造成的影響

自己的資料匯入由於是md5排序後的資料,所以匯入的時候遇到的一個問題就是:在一個叢集中,一個匯入資料的程序一動不動,所以的client都在等待一個region(就是一個節點),過了一會後,變成了下一個region

查到了一些資料,不過這種做飯還不是很適合我,所以我只能考慮用另外的方法來處理

用多執行緒同時讀取統一個檔案的不同位置,這樣讀入的rowkye就分散了。多執行緒的資料與自己regions的數目相同即可。

另外要避免這種問題就是在建立表的時候預先分佈regions,不過似乎如果建好了表就不能split regions了。誰有這方面的方法不吝賜教。

單調遞增Row Keys/時序資料

在Tom White的Hadoop: The Definitive Guide一書中,有一個章節描述了一個值得注意的問題:在一個叢集中,一個匯入資料的程序一動不動,所以的client都在等待一個region(就是一個節點),過了一會後,變成了下一個region...如果使用了單調遞增或者時序的key就會造成這樣的問題。詳情可以參見IKai畫的漫畫monotonically increasing values are bad。使用了順序的key會將本沒有順序的資料變得有順序,把負載壓在一臺機器上。所以要儘量避免時間戳或者(e.g. 1, 2, 3)這樣的key。

如果你需要匯入時間順序的檔案(如log)到Hbase中,可以學習OpenTSDB的做法。

他有一個頁面來描述他的schema.OpenTSDB的Key的格式是[metric_type][event_timestamp],乍一看,似乎違背了不將timestamp做key的建議,但是他並沒有將timestamp作為key的一個關鍵位置,有成百上千的metric_type就足夠將壓力分散到各個region了。