Skip to content

필사 모드: HBaseテーブルのpresplit方法

日本語
0%
정확도 0%
💡 왼쪽 원문을 읽으면서 오른쪽에 따라 써보세요. Tab 키로 힌트를 받을 수 있습니다.
원문 렌더가 준비되기 전까지 텍스트 가이드로 표시합니다.

Overview

HBaseは分散処理のために、1つのテーブルをregionという単位で複数に分割して保存・管理します。

1つのRegionから始まり、リージョンのサイズが大きくなるにつれて、大きなリージョンは自動的にSplitされ、2つのregionに分割されます。

しかし、このsplit処理には大きなコストがかかります。

そのため、初期データが多いと判断される場合は、テーブル作成時にリージョンを事前に分割しておくことで、クラスタへの負荷を軽減できます。

では、どのような基準でテーブルをsplitすればよいのでしょうか?おそらく正解はrow-keyの設計によって異なるでしょう。

rowkeyの範囲が1xxxxxxから9xxxxxxであることが事前にわかっている場合、prefixが1から9のregionに事前分割するのが良いでしょう。

一般的な状況でよく使われるrowkeyパターンにも汎用的に使える3つの方法を紹介します。

PreSplit方法

1. HexStringSplit

以下のように、テーブル作成時にsplitアルゴリズムとして`HexStringSplit`を選択すると、HexString[1-9a-z]を基準にregionをsplitして生成します。

create 'user-table', 'cf', {NUMREGIONS =>10, SPLITALGO => 'HexStringSplit'}

2. UniformSplit

`UniformSplit`オプションも存在します。テーブルを`random bytes keys`で分割する方式で、regionは以下のように生成されます。

create 'user-table2', 'cf', {NUMREGIONS =>10, SPLITALGO => 'UniformSplit'}

3. Custom Split

HBaseがデフォルトで提供するsplitアルゴリズムの代わりに、split関数を設定してリージョンを事前分割することも可能です。

例えば、データがすべて`user#xxxx`というrowkeyを持っており、`user#`というprefixを先頭に付ける必要がある場合、hbase shellで以下のようにテーブルを作成できます。

n_splits = 10

create 'usertable', 'family', {SPLITS => (1..n_splits).map {|i| "user#{1000+i*(9999-1000)/n_splits}"}}

Reference

- [https://hbase.apache.org/book.html](https://hbase.apache.org/book.html)

以上、HBase Tableをpresplitする3つの方法についての投稿を終わります。

クイズ

HBaseでテーブル作成時にpresplitする方法について解説します。

HexStringSplit

以下のように、テーブル作成時にsplitアルゴリズムとしてHexStringSplitを選択すると、HexString[1-9a-z]を基準にregionをsplitして生成します。

UniformSplit UniformSplitオプションも存在します。テーブルをrandom bytes

keysで分割する方式で、regionは以下のように生成されます。 Custom Split

HBaseがデフォルトで提供するsplitアルゴリズムの代わりに、split関数を設定してリージョンを事前分割することも可能です。

현재 단락 (1/26)

HBaseは分散処理のために、1つのテーブルをregionという単位で複数に分割して保存・管理します。

작성 글자: 0원문 글자: 1,538작성 단락: 0/26