HBase から Bigtable へのレプリケーション

Cloud Bigtable HBase レプリケーション ライブラリは、オープンソースの Java 用 Cloud Bigtable HBase クライアントのコンポーネントです。このレプリケーション ライブラリにより、HBase レプリケーション サービスを使用して、HBase クラスタから Bigtable インスタンスにデータを非同期でレプリケーションできるようになります。README とソースコードを GitHub リポジトリで確認できます。

ユースケース

  • Bigtable へのオンライン移行 - Bigtable HBase レプリケーション ライブラリと既存の HBase データのオフライン移行を組み合わせて使用することで、ダウンタイムをほとんど発生させずに HBase から Bigtable に移行できます
  • データ復旧 - 予期しない事態に備えるため、HBase データをオフサイトの Bigtable インスタンスに複製します。
  • データセットの一元管理 - このライブラリを使用すると、複数のロケーションにある HBase クラスタから単一の Bigtable インスタンスにデータを複製し、クラスタ間のレプリケーションを自動的に処理できます。
  • HBase フットプリントの拡張 - 現在の HBase ロケーション以外のロケーションにクラスタがある Bigtable インスタンスに複製します。

概要

Bigtable HBase レプリケーション ライブラリは、ベースの HBase レプリケーション サービスを拡張します。HBase クラスタに書き込まれるデータは、標準の HBase レプリケーションが別の HBase クラスタにデータをコピーする場合と同じ方法で Bigtable インスタンスに非同期で複製されます。このライブラリは、ソースの HBase クラスタのログ先行書き込み(WAL)を使用して、Bigtable インスタンスにミューテーションを push します。

HBase クラスタ全体を Bigtable に複製することも、特定のテーブルまたは列ファミリーのみを複製することもできます。つまり、HBase レプリケーションはクラスタ、テーブル、列ファミリー レベルで有効にできます。

HBase から Bigtable へのレプリケーションには結果整合性があります。

画像

Bigtable への移行

Bigtable HBase レプリケーション ライブラリを使用すると、アプリケーションを一時停止することなく、Bigtable への移行を行うことができます。

HBase から Bigtable へのオンライン移行の大まかな流れは次のとおりです。詳しくは、README をご覧ください。

  1. 始める前に、セットアップと構成の手順を行ってください。
  2. HBase クラスタでレプリケーションを有効にします。
  3. Bigtable レプリケーション エンドポイントをピアとして追加します。
  4. Bigtable ピアを無効にします。これにより、その時点からの HBase への書き込みが HBase クラスタ上バッファリングされます。
  5. バッファリングで新たな書き込みのキャプチャが開始したら、オフライン移行ガイドの説明に従って、既存の HBase データのスナップショットを移行します。
  6. オフライン移行が完了したら Bigtable ピアを再度有効にして、バッファのドレインを行い、Bigtable への書き込みを再開します。
  7. バッファがドレインされたら、アプリケーションを再起動して Bigtable にリクエストを送信します。

レプリケーション ライブラリのセットアップと構成

Bigtable HBase レプリケーションを使用する前に、このセクションのタスクを完了する必要があります。

認証を構成する

レプリケーション ライブラリに Bigtable への書き込み権限を付与するには、サービス アカウントを作成するの手順を行います。新しく作成したサービス アカウントに、roles/bigtable.user ロールを割り当てます。

次に、HBase クラスタ全体で hbase-site.xml ファイルに次の行を追加します。

<property>
    <name>google.bigtable.auth.json.keyfile</name>
    <value>JSON_FILE_PATH</value>
    <description>
        Service account JSON file to connect to Cloud Bigtable
    </description>
</property>

JSON_FILE_PATH は、ダウンロードした JSON ファイルのパスに置き換えます。

設定可能なその他のプロパティについては、HBaseToCloudBigtableReplicationConfiguration をご覧ください。

移行先のインスタンスとテーブルを作成する

HBase から Bigtable にレプリケーションを行う前に、Bigtable インスタンスを作成します。Bigtable インスタンスには、マルチ プライマリで動作するクラスタを 1 つ以上含めることができます。HBase レプリケーション サービスからのリクエストは、Bigtable インスタンス内で最も近いクラスタにルーティングされ、そのインスタンス内の他のクラスタに複製されます。

Bigtable 宛先テーブルは HBase テーブルと同じ名前で、同じ列ファミリーが存在している必要があります。Bigtable のスキーマ変換ツールを使用して HBase テーブルと同じスキーマのテーブルを作成する方法については、宛先テーブルを作成するをご覧ください。データをインポートではなく複製する場合でも、手順は同じです。

構成プロパティを設定する

HBase クラスタ全体で hbase-site.xml に以下のものを追加します。

<property>
    <name>google.bigtable.project.id</name>
    <value>PROJECT_ID</value>
    <description>
      Bigtable project ID
    </description>
</property>
<property>
    <name>google.bigtable.instance.id</name>
    <value>INSTANCE_ID</value>
    <description>
       Bigtable instance ID
    </description>
</property>
<property>
    <name>google.bigtable.app_profile.id</name>
    <value>APP_PROFILE_ID</value>
    <description>
       Bigtable app profile ID
    </description>
</property>

次のように置き換えます。

  • PROJECT_ID: Bigtable インスタンスが存在する Google Cloud プロジェクト。
  • INSTANCE_ID: データを複製する Bigtable インスタンスの ID。
  • APP_PROFILE_ID: Bigtable への接続に使用するアプリ プロファイルの ID。

レプリケーション ライブラリをインストールする

Bigtable HBase レプリケーション ライブラリを使用するには、このライブラリを HBase クラスタ内のすべてのサーバーにインストールする必要があります。HBase バージョン(1.x または 2.x)に対応するレプリケーション ライブラリのバージョンを使用します。

JAR をダウンロードする

レプリケーション ライブラリを取得するには、HBase シェルで次のコマンドを実行します。

wget BIGTABLE_HBASE_REPLICATION_URL

最新の JAR の URL を含む BIGTABLE_HBASE_REPLICATION_URL をレプリケーション ライブラリの Maven リポジトリにある依存関係で置き換えます。ファイル名は https://repo1.maven.org/maven2/com/google/cloud/bigtable/bigtable-hbase-1.x-replication/1.0.0/bigtable-hbase-1.x-replication-1.0.0-jar-with-dependencies.jar のようになります。

URL を確認する方法や JAR を手動でダウンロードする方法は、以下のとおりです。

  1. 使用している HBase バージョンのレプリケーション ライブラリ リポジトリに移動します。
  2. 最新のバージョン番号(1.0.0 など)をクリックします。
  3. jar-with-dependencies ファイルを特定します(通常は先頭にあります)。
  4. URL を右クリックしてコピーするか、ファイルをクリックしてダウンロードします。

JAR をインストールする

マスターサーバーとリージョン サーバーを含むすべての HBase サーバーで、ダウンロードしたファイルを HBase クラスパスのフォルダにコピーします。たとえば、ファイルを /usr/lib/hbase/lib/ にコピーしても構いません。

Bigtable ピアを追加する

HBase から Bigtable にレプリケーションを行うには、Bigtable エンドポイントをレプリケーション ピアとして追加する必要があります。

  1. HBase サーバーを再起動して、レプリケーション ライブラリが読み込まれることを確認します。
  2. HBase シェルで次のコマンドを実行します。
add_peer PEER_ID_NUMBER, ENDPOINT_CLASSNAME =>
'com.google.cloud.bigtable.hbaseHBASE_VERSION_NUMBER_x.replication.HbaseToCloudBigtableReplicationEndpoint`

次のように置き換えます。

  • PEER_ID_NUMBER: Bigtable レプリケーション ピアの整数 ID。一部のテーブルのみ HBase レプリケーションを有効にするには、add_peer オプション パラメータを使用します。

  • HBASE_VERSION_NUMBER: 使用している HBase バージョンの数。HBase 1.x には 1 を、HBase 2.x には 2 を使用します。(HBase 3.x はサポートされていません)。

次のステップ