せっかくまとめたのでこちらにも貼っておきます。
まとめのまとめ
コンパクションのトリガー
HBaseAdmin
でcompact
/split
指示をした時 (hbase shell でのコマンド発行、WebUIのボタンぽちとか)MemStore
をflushする時- リージョンをopenした時
MajorCompactionChecker
(約3時間おきに起動) が、前回のメジャーコンパクションから24時間 (+/- 4.8時間: 後述) 以上経過しているリージョンを発見した時
メジャーコンパクションの周期
メジャーコンパクションはデフォルトで24時間周期になっているが、+/- 4.8時間 のブレが入れてある。=> HBase のメジャーコンパクション実行時間 - 科学と非科学の迷宮
メジャーコンパクションになる条件
コンパクション指示があった時に、- 強制メジャーコンパクション指定されている (major_compact コマンドなど)
- 前回のメジャーコンパクションから24時間 +/- 4.8時間 経過している
- コンパクション対象のリージョンに、特別大きなストアファイルがなく、またその数が一定数よりも少ない場合
その他
- コンパクション処理後にはスプリット出来るかどうかを確認して、できるようであればスプリットする
- スプリット指示は、実際には強制スプリット指定でコンパクション指示を出している
- 単体でのメジャーコンパクションはそんなに負荷にならなそう
- MapReduceでデータ投入中にリージョン分割が起こるのは危険