Migrar desde versiones anteriores de HBase

El cliente de HBase de Cloud Bigtable para Java está dirigido a las versiones 1.x y 2.x de la API de Apache HBase. La versión 1.0 de la API incluía algunos cambios significativos con respecto a las versiones anteriores de HBase. Si vas a migrar de HBase a Bigtable y tu aplicación está orientada a una versión anterior de la API de HBase, tendrás que actualizarla para que sea compatible con Bigtable.

Para ayudarte con la migración, en esta página se resumen los cambios más importantes de la API de HBase 1.0.

Interfaz de conexión

En HBase 1.0 y versiones posteriores, en lugar de usar la interfaz HConnection obsoleta, debes usar org.apache.hadoop.hbase.client.ConnectionFactory. Esta clase crea objetos que implementan la nueva interfaz Connection. ConnectionFactory sustituye a las clases obsoletas ConnectionManager y HConnectionManager.

Crear un objeto Connection es una operación relativamente costosa. Debes crear un objeto Connection por proceso y compartirlo según sea necesario. Los objetos Connection son seguros para subprocesos.

Además, asegúrate de cerrar la conexión cuando hayas terminado de usarla. En HBase 1.0 y versiones posteriores, es responsabilidad de la aplicación gestionar el ciclo de vida de la conexión.

El código actualizado debería ser similar al siguiente ejemplo:

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

Clase TableName

En versiones anteriores de HBase, cuando manipulabas una tabla, podías especificar el nombre de la tabla como un valor String o byte[]. En HBase 1.0 y versiones posteriores, debes especificar el nombre de la tabla creando una instancia de org.apache.hadoop.hbase.TableName:

String tableName = "MyTable";
    // or byte[] tableName = Bytes.toBytes("MyTable");
TableName tableNameObj = TableName.valueOf(tableName);

Interfaces Table, BufferedMutator y RegionLocator

En HBase 1.0, la clase HTable se sustituye por las siguientes interfaces:

Usa un objeto Connection para obtener una instancia de estas interfaces:

Table table = connection.getTable(tableNameObj);
BufferedMutator mutator = connection.getBufferedMutator(tableNameObj);
RegionLocator regionLocator = connection.getRegionLocator(tableNameObj);

Las instancias de Table, BufferedMutator y RegionLocator no son seguras para subprocesos. Sin embargo, se trata de objetos ligeros, por lo que puedes crearlos según sea necesario en el contexto de un solo subproceso.

Interfaz de administrador

En HBase 1.0, la clase HBaseAdmin se sustituye por la interfaz org.apache.hadoop.hbase.client.Admin. Como Bigtable gestiona las tareas de mantenimiento automáticamente, no se admiten muchos de los métodos de la interfaz Admin. Consulta las diferencias entre las APIs de HBase y Bigtable para obtener más información.

Usa un objeto Connection para obtener una instancia de la interfaz Admin:

Admin admin = connection.getAdmin();