旧バージョンの 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
で、非推奨のクラス ConnectionManager
と HConnectionManager
を置換します。
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
クラスは次のインターフェースで置換されています。
org.apache.hadoop.hbase.client.Table
: 単一テーブル内のデータを操作できます。org.apache.hadoop.hbase.client.BufferedMutator
: テーブルに対する非同期バッチ書き込みを実行できます。HTableInterface
のsetAutoFlush(boolean)
メソッドを呼び出す代わりに、このクラスを使用してください。org.apache.hadoop.hbase.client.RegionLocator
: テーブルのリージョンに関する情報にアクセスできます。
これらのインターフェースのインスタンスを取得する場合は Connection
オブジェクトを使用します。
Table table = connection.getTable(tableNameObj);
BufferedMutator mutator = connection.getBufferedMutator(tableNameObj);
RegionLocator regionLocator = connection.getRegionLocator(tableNameObj);
Table
、BufferedMutator
、RegionLocator
のインスタンスはスレッドセーフではありません。ただし、これらのインスタンスは軽量オブジェクトなので、単一スレッドのコンテキスト内で必要に応じて作成できます。
Admin インターフェース
HBase 1.0 では、HBaseAdmin
クラスが org.apache.hadoop.hbase.client.Admin
インターフェースで置換されています。Bigtable では、メンテナンス タスクは自動的に処理されるため、Admin
インターフェースの多くのメソッドはサポートされていません。詳しくは、HBase API と Bigtable API の違いをご覧ください。
Admin
インターフェースのインスタンスを取得する場合は、Connection
オブジェクトを使用します。
Admin admin = connection.getAdmin();