从早期版本 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
取代了已弃用的 ConnectionManager
和 HConnectionManager
类。
创建 Connection
对象是一项成本相对高昂的操作。您应该为每个过程创建一个 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 之间的差异。
请使用 Connection
对象获取 Admin
接口的实例:
Admin admin = connection.getAdmin();