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:
org.apache.hadoop.hbase.client.Table
: te permite trabajar con datos en una sola tabla.org.apache.hadoop.hbase.client.BufferedMutator
: Te permite realizar operaciones de escritura por lotes asíncronas en una tabla. Usa esta clase en lugar de llamar al métodosetAutoFlush(boolean)
enHTableInterface
.org.apache.hadoop.hbase.client.RegionLocator
: proporciona acceso a información sobre las regiones de una tabla.
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();