从早期版本 HBase 迁移

Java 版 Cloud Bigtable HBase 客户端适用于 Apache HBase API 的 1.x 和 2.x 版本。该 API 1.0 版本中对 HBase 早期版本进行了一些重大变更。如果您要从 HBase 迁移到 Bigtable,而您的应用面向的是旧版 HBase API,则需要更新您的应用以使其与 Bigtable 兼容。

为了帮助您完成迁移,此页面总结了 HBase 1.0 API 中进行的重大变更。

Connection 接口

在 HBase 1.0 及更高版本中,您应使用 org.apache.hadoop.hbase.client.ConnectionFactory,而不要依赖已弃用的 HConnection 接口。该类会创建可实现新 Connection 接口的对象。ConnectionFactory 取代了已弃用的 ConnectionManagerHConnectionManager 类。

创建 Connection 对象是一项成本相对高昂的操作。您应该为每个过程创建一个 Connection 对象,并根据需要共享该对象。 Connection 对象是线程安全的。

另外,使用完此连接后,请务必将其关闭。在 HBase 1.0 及更高版本中,应用需负责管理此连接的生命周期。

更新后的代码应类似于以下示例:

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

TableName 类

在旧版 HBase 中,当您处理某个表时,您可以将表名称指定为 Stringbyte[] 值。在 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 之间的差异

请使用 Connection 对象获取 Admin 接口的实例:

Admin admin = connection.getAdmin();