Apache HBase から Cloud Bigtable へのテーブル スキーマの移行
Google Cloud Japan Team
※この投稿は米国時間 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 インスタンスに関する情報が必要です。
まず、変数を設定します。
次に、ツールを実行します。
一部のテーブルの名前を変更する場合は、以下を追加してマッピング ファイルを提供します。
テーブル名の変更の詳細については、以降のセクションをご確認ください。
2) プライベート VPC 上の HBase クラスタ
このモードは、HBase クラスタがプライベート VPC にあり、HBase と Cloud Bigtable の両方に接続できるホストがない場合に使用します。スキーマ変換のプロセスは、次の図に示す 3 つの手順で構成されています。
これらの手順は次のとおりです。
スキーマ変換ツールが HBase ネットワーク上のマシンで実行されます。HBase スキーマが中間スキーマ ファイルに保存されます。
スキーマ ファイルが Cloud Bigtable にアクセスできるマシンにコピーされます。
Cloud Bigtable にアクセスできるホスト上で、スキーマ変換ツールが再度実行されます。ツールは中間スキーマ ファイルからスキーマを読み取り、Cloud Bigtable にテーブルを作成します。
なお、上の手順 1 と手順 3 で使用したホストに、スキーマ変換ツールの jar ファイルをダウンロードする必要があります。
手順 1. スキーマを HBase からファイルにコピーするには:
まず、変数を設定します。
次に、ツールを実行します。
手順 2. ファイルにスキーマを取り込んだら、そのファイルを GCP に接続できるホストにコピーします。
手順 3. ファイルから Bigtable にテーブルを作成するには、最初に環境変数を設定します。
次に、スキーマ変換ツールを実行します。
注: 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