Keep up with the latest announcements from Google Cloud Next '21. Click here.

データベース

Apache HBase から Cloud Bigtable へのテーブル スキーマの移行

#databases

※この投稿は米国時間 2021 年 9 月 30 日に、Google Cloud blog に投稿されたものの抄訳です。

Apache HBase から Cloud Bigtable への大規模なワークロードの移行は非常に一般的であり、Google ではその作業をより簡単かつ迅速に行えるよう取り組んでいます。Cloud Bigtable は、そのスケーラビリティ、少ない管理オーバーヘッド、高可用性、HBase API との互換性により、HBase 上で本番環境のワークロードを実行しているお客様にとって最適なサービスです。

現在、Cloud Bigtable に移行するお客様は、HBase のテーブルに基づいて Cloud Bigtable にテーブルを手動で作成する必要があります。移行のために複数のテーブルの移動やテーブルの事前分割が必要な場合、このプロセスは面倒なものになることがあります。この問題を解決するために、Google では Cloud Bigtable スキーマ変換ツールが導入されています。このツールは HBase に接続し、テーブルのスキーマをコピーして、Cloud Bigtable に同様のテーブルを全自動で作成します。

このブログ投稿は、読者の方が HBase と Bigtable のコンセプトに精通していることを前提としています。

データベース スキーマ

Bigtable のスキーマでは通常、列ファミリーでテーブルを作成し、列ファミリーごとにガベージ コレクション ポリシーを設定する必要があります。Cloud Bigtable スキーマの定義は HBase スキーマの定義と非常によく似ています。

HBase スキーマと Cloud Bigtable スキーマの違い

テーブルの構成: テーブルを作成する際の HBase と Bigtable の主な違いの一つは、HBase ではデータ定義言語(DDL)ステートメントの一部としてテーブルと列ファミリーのプロパティを構成できることです。これらのプロパティはサーバー側の構成であり、最大領域サイズ、圧縮、エンコードなどの設定により、テーブルのパフォーマンスを微調整することが可能です。

一方、Cloud Bigtable はマネージド サービスであるため、検索、広告、マップなど、低レイテンシで高スループットな Google プロダクトの 15 年以上にわたる Bigtable 本番環境サポートでのノウハウを活用して、 これらの構成パラメータをお客様に代わって最適化します。

名前空間: このようなサーバー側の構成を設定できる点に加えて、名前空間も大きな違いとして挙げられます。HBase では名前空間の機能が導入されており、アクセス権、同じクラスタ内の同じ名前のテーブルの分離、割り当てなどのより高いレベルのスコープを作成する機能を提供します。

Cloud Bigtable は名前空間をサポートしていません。アクセス権を管理するには、先頭に名前空間が付くテーブル(namespace-tablename)を使用し、Cloud Bigtable のテーブルレベルの IAM コントロール を使用します。このような用途に対応するためのスキーマ変換ツールの構成方法については、後述の「テーブル名の変更と名前空間の取り扱い」セクションをご覧ください。

Cloud Bigtable スキーマ変換ツール

CBT スキーマ変換ツールは、HBase からスキーマを取得して Cloud Bigtable に同様のテーブルを作成します。スキーマ変換ツールは、Cloud Bigtable にテーブルを作成する際に HBase から次のデータを取得します。

  • テーブル名

  • 列ファミリー

    • 名前

    • ガベージ コレクション ポリシー

  • HBase テーブルからのテーブル分割

スキーマ変換ツールから作成されたすべてのテーブルは事前に分割されているため、負荷を分散するためのインポート ジョブ中のウォームアップ時間は必要ありません。インポート ジョブの書き込み負荷は、最初から複数の Cloud Bigtable ノードに分散されています。時間の経過とともに、Cloud Bigtable はワークロードに応じて自動的に分割を最適化します

インストール / ダウンロード

スキーマ変換ツールを使用するには、依存関係のある最新の jar を Maven リポジトリからダウンロードします。ファイル名は bigtable-hbase-1.x-tools-1.24.0-jar-with-dependencies.jar のようになります。

このツールは、HBase および Cloud Bigtable インスタンスに接続できるマシンから実行するのが理想的です。

使用方法

スキーマ変換ツールは、2 つの異なるモードで機能します。

1) HBase と Cloud Bigtable 間の直接接続

このモードは、次の図に示すように、HBase と CloudBigtable の両方に接続できるマシンがある場合に使用します。このマシン(最も可能性が高いのは HBase エッジノード / ゲートウェイ ノード)は、ツールを実行する場所です。このツールは HBase に接続し、スキーマをメモリに取り込んで、Cloud Bigtable にテーブルを作成します。

このモードでツールを実行するには、HBase クラスタと Cloud Bigtable インスタンスに関する情報が必要です。

まず、変数を設定します。

  ZOOKEEPER_CLIENT_PORT=2181
ZOOKEEPER_QUORUM="localhost"
GCP_PROJECT_ID="test-project"
BIGTABLE_INSTANCE_ID="schema-translator-test"
TABLE_FILTER_REGEX=".*"

次に、ツールを実行します。

  java -Dhbase.zookeeper.property.clientPort=$ZOOKEEPER_CLIENT_PORT \
-Dhbase.zookeeper.quorum=ZOOKEEPER_QUORUM \
-Dgoogle.bigtable.project.id=GCP_PROJECT_ID \
-Dgoogle.bigtable.instance.id=BIGTABLE_INSTANCE_ID \
-Dgoogle.bigtable.table.filter=TABLE_FILTER_REGEX \
-jar ./path/to/cloud-bigtable-hbasetools.jar

一部のテーブルの名前を変更する場合は、以下を追加してマッピング ファイルを提供します。

  -Dgoogle.bigtable.schema.mapping.filepath=/path/to/mapping/file.json.

テーブル名の変更の詳細については、以降のセクションをご確認ください。

2) プライベート VPC 上の HBase クラスタ

このモードは、HBase クラスタがプライベート VPC にあり、HBase と Cloud Bigtable の両方に接続できるホストがない場合に使用します。スキーマ変換のプロセスは、次の図に示す 3 つの手順で構成されています。

これらの手順は次のとおりです。

  1. スキーマ変換ツールが HBase ネットワーク上のマシンで実行されます。HBase スキーマが中間スキーマ ファイルに保存されます。

  2. スキーマ ファイルが Cloud Bigtable にアクセスできるマシンにコピーされます。

  3. Cloud Bigtable にアクセスできるホスト上で、スキーマ変換ツールが再度実行されます。ツールは中間スキーマ ファイルからスキーマを読み取り、Cloud Bigtable にテーブルを作成します。

なお、上の手順 1 と手順 3 で使用したホストに、スキーマ変換ツールの jar ファイルをダウンロードする必要があります。

手順 1. スキーマを HBase からファイルにコピーするには:

まず、変数を設定します。

  ZOOKEEPER_CLIENT_PORT=2181
ZOOKEEPER_QUORUM="localhost"
SCHEMA_FILE_PATH="/tmp/schema.json"
TABLE_FILTER_REGEX=".*"

次に、ツールを実行します。

  java -Dhbase.zookeeper.property.clientPort=$ZOOKEEPER_CLIENT_PORT \ -Dhbase.zookeeper.quorum=$ZOOKEEPER_QUORUM \
-Dgoogle.bigtable.output.filepath=$SCHEMA_FILE_PATH \
-Dgoogle.bigtable.table.filter=$TABLE_FILTER_REGEX \ 
-jar ./path/to/cloud-bigtable-hbasetools.jar

手順 2. ファイルにスキーマを取り込んだら、そのファイルを GCP に接続できるホストにコピーします。

手順 3. ファイルから Bigtable にテーブルを作成するには、最初に環境変数を設定します。

  SCHEMA_FILE_PATH="/tmp/schema.json"
GCP_PROJECT_ID="test-project"
BIGTABLE_INSTANCE_ID="schema-translator-test"

次に、スキーマ変換ツールを実行します。

  java  -Dgoogle.bigtable.input.filepath=$SCHEMA_FILE_PATH \
-Dgoogle.bigtable.project.id=GCP_PROJECT_ID \
-Dgoogle.bigtable.instance.id=BIGTABLE_INSTANCE_ID \
-jar ./path/to/cloud-bigtable-hbasetools.jar

注: HBase と CBT の間でガベージ コレクション ポリシーを変更する場合は、レプリケートされたテーブルでの gc ポリシーの変更に関する制限に注意してください。

テーブル名の変更と名前空間の取り扱い

状況によっては、HBase のテーブル名が Cloud Bigtable 上では実行できない場合があります。たとえば、テーブル名がカスタム名前空間の下にある場合です(namespace:tablename)。このような状況に対応するために、スキーマ変換ツールではテーブルの名前変更をサポートしています。テーブル名の from → to マッピングのマップを含む JSON ファイルを提供できます。

たとえば、{“ns:hbase-tablename”: “cloud-bigtable-tablename”} を含む json ファイルは、名前空間 ns の HBase テーブル hbase-tablename を `cloud-bigtable-tablename` に名前変更するようスキーマ トランスレータに指示します。ツールを実行した後、Cloud Bigtable cbt list コマンドを実行すると、`cloud-bigtable-tablename` という名前の新しいテーブルが表示されます。

まとめ

Cloud Bigtable は、フルマネージドかつ API 互換性のある Apache HBase の代替サービスです。HBase から Cloud Bigtable に移行する際には、GCS へのデータのエクスポート、Cloud Bigtable でのターゲット テーブルの作成、Cloud Bigtable へのデータのインポート、データの整合性の検証など、いくつかの手順を実行する必要があります。Cloud Bigtable チームは、先日リリースされた Dataflow パイプライン(Cloud Bigtable に HBase スナップショットをインポートし、データ移行の検証を行う)など、シームレスな移行プロセスを実現するためのツールを提供しています。このブログ投稿では、既存の HBase テーブルに基づいて Cloud Bigtable でテーブルを作成できる HBase スキーマ変換ツールをご紹介しています。これらのテーブルは、HBase から Cloud Bigtable へのデータ移行におけるターゲットとして機能します。ターゲット テーブルの作成は、データを Cloud Bigtable にインポートする前に行う必須手順です。

Cloud Bigtable と HBase API の詳細については、こちらを参照してください。

- Google Cloud クラウド データ エンジニア Jordan Hambleton

- Google Cloud SWE Shitanshu Verma