旧バージョンの 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();