HBaseで同一行同一カラムにデータをPutし続けると遅くなる

HBaseで同一行同一カラムにデータをPutし続けると、データの読み込みが遅くなってくる。メジャーコンパクションが実行されると回復する。
8
Hisayoshi Tamaki @hisayosh

@tatsuya6502 HBase入門03の資料と当時のtwitterログを拝見しましたが、分からなかったことがあったため質問させて頂きたいです。 (次に続きます。)

2010-09-01 19:37:21
Hisayoshi Tamaki @hisayosh

@tatsuya6502 「既存データの更新を重ねるとファイルサイズが大きくなり、その分readが遅くなる」というのは、特定データをputし続けると、そのデータをreadする速度はput数に比例する形で、再現なく遅くなり続けるということでしょうか。

2010-09-01 19:39:09
Tatsuya Kawano @tatsuya6502

.@hisayosh はい、 HBase では、同じ行の同じカラムにPutを重ねると、そのカラムからのデータは読み出しが遅くなってきます。これは、HFile上に更新前の古いデータが残っているからです。

2010-09-02 12:30:30
Tatsuya Kawano @tatsuya6502

.@hisayosh ただ、際限なく遅くなると困りますので、メジャーコンパクションというゴミ掃除処理が定期的に実行されます。これにより、古くなりすぎたデータが取り除かれ、読み込み速度が回復します。

2010-09-02 12:32:06
Tatsuya Kawano @tatsuya6502

.@hisayosh メジャーコンパクションは、ディフォルト設定では、24時間に一度実行されます。また hbase shell からも起動できます。

2010-09-02 12:33:20
Tatsuya Kawano @tatsuya6502

.@hisayosh このあたりの動作は Bigtable, HBase, Cassandra でほぼ同じです。詳しく知りたい場合は「Googleを支える技術」という書籍の Bigtable の章が参考になるはずです。

2010-09-02 12:36:05
Tatsuya Kawano @tatsuya6502

.@hisayosh ただ、Bigtable と HBase でマイナーコンパクションの定義が違うので注意が必要です。BTのマイナーコンパクションは、HBではflushと呼びます。HBのマイナーコンパクションは、最近flushしたHFile 数個だけを1つにマージする処理です

2010-09-02 12:47:35
Hisayoshi Tamaki @hisayosh

.@tatsuya6502 大変わかりやすいご解説、ありがとうございます。評価中にread速度が低下し続ける症状が出たため心配していましたが、おかげさまで仕組みとワークアラウンドがわかりました。 (余談ですが「Googleを支える技術」を早速注文しました)

2010-09-02 20:17:27
Tatsuya Kawano @tatsuya6502

.@hisayosh 謎が1つ解けたようでよかったです。Bigtable と HBase の違いですが、もう1点、たしかあの本に、Chubbyでロックを実現と書かれていましたが、HBaseでは ZooKeeper は別の目的、死活監視と構成情報のルックアップに使ってます。

2010-09-03 07:57:18
Tatsuya Kawano @tatsuya6502

.@hisayosh HBase が ZooKeeper をどう使っているかは、 ZooKeeper のwikiで解説されています。 http://ow.ly/1qOUai

2010-09-03 07:57:48
Hisayoshi Tamaki @hisayosh

.@tatsuya6502 major compactionについて、どの程度read速度が回復するか試してみました。read速度回復のためには、major_compact前のflushが必須のようです。 http://twitpic.com/2uilaq

2010-10-04 12:56:43
拡大
Tatsuya Kawano @tatsuya6502

@hisayosh major compaction の情報、ありがとうございました。ちなみにX軸の単位はいくつですか? QT: http://twitpic.com/2uilaq

2010-10-05 06:29:58
拡大
Hisayoshi Tamaki @hisayosh

.@tatsuya6502 X軸の単位は秒です(すみません、抜けていました。)。イメージ通り綺麗な二次曲線が描かれましたが、思ったよりも速く、大きく処理速度が低下する印象を受けました。(HBaseのVersionは0.20.6です。)

2010-10-05 09:23:21
Tatsuya Kawano @tatsuya6502

@hisayosh X軸の単位、了解しました。たしかに、初期の速度低下が激しいですねぇ。いまの実装だと苦手な処理です。最新バージョンがどこにあるか、メモリー上のインデックスで管理すれば速くなりそう。 @myen

2010-10-06 06:03:41