旧バージョンの HBase からの移行

Java 用 Cloud Bigtable HBase クライアントは、Apache HBase API のバージョン 1.x と 2.x に対応しています。バージョン 1.0 の API には、旧バージョンの HBase から大きく変更されている点がいくつかあります。HBase から Bigtable に移行する際に、アプリケーションが HBase API の古いバージョンをターゲットにしている場合は、Bigtable に対応できるようにアプリケーションを更新する必要があります。

移行作業を容易にするため、このページでは、HBase 1.0 API における注目すべき変更点を要約します。

Connection インターフェース

HBase 1.0 以降では、非推奨の HConnection インターフェースではなく、org.apache.hadoop.hbase.client.ConnectionFactory を使用する必要があります。このクラスにより、新しい Connection インターフェースを実装するオブジェクトが作成されます。ConnectionFactory で、非推奨のクラス ConnectionManagerHConnectionManager を置換します。

Connection オブジェクトの作成は比較的負荷の大きいオペレーションです。プロセスごとに 1 つの Connection オブジェクトを作成し、それを必要に応じて共有する必要があります。Connection オブジェクトはスレッドセーフです。

また、使い終えた接続は必ず閉じる必要があります。HBase 1.0 以降では、接続のライフサイクルを管理するのはアプリケーションの責任です。

以下に、アップデートされたコードの例を示します。

Connection connection = ConnectionFactory.createConnection(config);
// ...
connection.close();

TableName クラス

旧バージョンの HBase では、テーブルを操作するとき、テーブル名を String または byte[] 値として指定することができました。HBase 1.0 以降では、org.apache.hadoop.hbase.TableName のインスタンスを作成してテーブル名を指定する必要があります。

String tableName = "MyTable";
    // or byte[] tableName = Bytes.toBytes("MyTable");
TableName tableNameObj = TableName.valueOf(tableName);

Table、BufferedMutator、および RegionLocator インターフェース

HBase 1.0 では、HTable クラスは次のインターフェースで置換されています。

これらのインターフェースのインスタンスを取得する場合は Connection オブジェクトを使用します。

Table table = connection.getTable(tableNameObj);
BufferedMutator mutator = connection.getBufferedMutator(tableNameObj);
RegionLocator regionLocator = connection.getRegionLocator(tableNameObj);

TableBufferedMutatorRegionLocator のインスタンスはスレッドセーフではありません。ただし、これらのインスタンスは軽量オブジェクトなので、単一スレッドのコンテキスト内で必要に応じて作成できます。

Admin インターフェース

HBase 1.0 では、HBaseAdmin クラスが org.apache.hadoop.hbase.client.Admin インターフェースで置換されています。Bigtable では、メンテナンス タスクは自動的に処理されるため、Admin インターフェースの多くのメソッドはサポートされていません。詳しくは、HBase API と Bigtable API の違いをご覧ください。

Admin インターフェースのインスタンスを取得する場合は、Connection オブジェクトを使用します。

Admin admin = connection.getAdmin();