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

Java 用 Cloud Bigtable HBase クライアントは、Apache HBase API 1.0 以降に対応しています。バージョン 1.0 の API には、旧バージョンの HBase から大きく変更されている点がいくつかあります。HBase から Cloud Bigtable に移行する場合に、アプリケーションが旧バージョンの HBase API を使用して書かれている場合は、Cloud 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 インターフェースが使用されます。Cloud Bigtable では、メンテナンス タスクは自動的に処理されるため、Admin インターフェースの多くのメソッドはサポートされていません。詳しくは、HBase API と Cloud Bigtable API の違いをご覧ください。

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

Admin admin = connection.getAdmin();
このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Cloud Bigtable ドキュメント