En esta página, se describen las consideraciones y los procesos para migrar datos de un clúster de Apache HBase a una instancia de Bigtable en en Google Cloud.
Para migrar datos a Bigtable desde un clúster de HBase que está alojado en un servicio de Google Cloud, como Dataproc o Compute Engine, consulta Migra HBase en Google Cloud a Bigtable.
Antes de comenzar con esta migración, debes tener en cuenta las implicaciones de rendimiento, el diseño del esquema de Bigtable, las implicaciones de tu método de autenticación y autorización, y el conjunto de atributos de Bigtable.
Consideraciones previas a la migración
En esta sección, se sugieren algunos aspectos que se deben revisar y considerar antes de comenzar la migración.
Rendimiento
En una carga de trabajo típica, Bigtable ofrece rendimiento muy predecible. Antes de migrar los datos, asegúrate de comprender los factores que afectan el rendimiento de Bigtable.
Diseño de esquema de Bigtable
En la mayoría de los casos, puedes usar el mismo diseño de esquema en Bigtable que en HBase. Si deseas cambiar tu esquema o si tu caso de uso está cambiando, revisa los conceptos presentados en Diseña tu esquema antes de migrar tus datos.
Autenticación y autorización
Antes de diseñar el control de acceso para Bigtable, revisa los procesos existentes de autenticación y autorización de HBase.
Bigtable usa los mecanismos estándar de Google Cloud para la autenticación y administración de identidades y accesos a fin de proporcionar control de acceso, por lo que puedes convertir tu autorización existente de HBase en IAM. Puedes asignar los grupos existentes de Hadoop que proporcionan mecanismos de control de acceso para HBase a diferentes cuentas de servicio.
Bigtable te permite controlar el acceso a nivel de proyecto, instancia y tabla. Para obtener más información, consulta Control de acceso.
Migra HBase a Bigtable
Para migrar tus datos de HBase a Bigtable, debes exportar una instantánea de HBase para cada tabla a Cloud Storage y, luego, importar los datos a Bigtable. Estos pasos son para un solo clúster de HBase y se describen en detalle en las siguientes secciones.
- Deja de enviar operaciones de escritura a tu clúster de HBase.
- Toma instantáneas de las tablas del clúster de HBase.
- Exporta los archivos de instantáneas a Cloud Storage.
- Calcula los hash y expórtalos a Cloud Storage.
- Crea tablas de destino en Bigtable.
- Importa los datos de HBase de Cloud Storage a Bigtable
- Validar los datos importados
- Dirige operaciones de escritura a Bigtable.
Antes de comenzar
Crea un bucket de Cloud Storage para almacenar tus instantáneas. Crea el bucket en la misma ubicación en la que planeas ejecutar tu trabajo de Dataflow.
Crea una instancia de Bigtable para almacenar tus tablas nuevas.
Identifica el clúster de Hadoop que exportas. Puedes ejecutar los trabajos para tu migración directamente en el clúster de HBase o en un clúster de Hadoop separado que tenga conectividad de red con el Namenode y los Datanodes del clúster de HBase.
Instala y configura el conector de Cloud Storage en cada nodo del clúster de Hadoop y en el host desde el que se inicia el trabajo. Para obtener más detalles sobre los pasos de instalación, consulta Instala el conector de Cloud Storage.
Abre un shell de comandos en un host que pueda conectarse a tu clúster de HBase y a tu proyecto de Bigtable. Allí es donde completarás los siguientes pasos.
Obtén la herramienta de traducción de esquema:
wget BIGTABLE_HBASE_TOOLS_URL
Reemplaza
BIGTABLE_HBASE_TOOLS_URL
por la URL deJAR with dependencies
más reciente disponible en el repositorio de Maven de la herramienta. El nombre del archivo es similar ahttps://repo1.maven.org/maven2/com/google/cloud/bigtable/bigtable-hbase-1.x-tools/1.24.0/bigtable-hbase-1.x-tools-1.24.0-jar-with-dependencies.jar
.Para encontrar la URL o descargar el archivo JAR de forma manual, haz lo siguiente:
- Ir al repositorio.
- Haz clic en el número de versión más reciente.
- Identifica
JAR with dependencies file
(por lo general, en la parte superior). - Haz clic con el botón derecho y copia la URL, o haz clic para descargar el archivo.
Obtén la herramienta de importación:
wget BIGTABLE_BEAM_IMPORT_URL
Reemplaza
BIGTABLE_BEAM_IMPORT_URL
por la URL deshaded JAR
más reciente disponible en el repositorio de Maven de la herramienta. El nombre del archivo es similar ahttps://repo1.maven.org/maven2/com/google/cloud/bigtable/bigtable-beam-import/1.24.0/bigtable-beam-import-1.24.0-shaded.jar
.Para encontrar la URL o descargar el archivo JAR de forma manual, haz lo siguiente:
- Ir al repositorio.
- Haz clic en el número de versión más reciente.
- Presiona Descargas.
- Mueve el mouse sobre shaded.jar.
- Haz clic con el botón derecho y copia la URL, o haz clic para descargar el archivo.
Configura las siguientes variables de entorno:
#Google Cloud export PROJECT_ID=PROJECT_ID export INSTANCE_ID=INSTANCE_ID export REGION=REGION export CLUSTER_NUM_NODES=CLUSTER_NUM_NODES #JAR files export TRANSLATE_JAR=TRANSLATE_JAR export IMPORT_JAR=IMPORT_JAR #Cloud Storage export BUCKET_NAME="gs://BUCKET_NAME" export MIGRATION_DESTINATION_DIRECTORY="$BUCKET_NAME/hbase-migration-snap" #HBase export ZOOKEEPER_QUORUM=ZOOKEPER_QUORUM export ZOOKEEPER_PORT=2181 export ZOOKEEPER_QUORUM_AND_PORT="$ZOOKEEPER_QUORUM:$ZOOKEEPER_PORT" export MIGRATION_SOURCE_DIRECTORY=MIGRATION_SOURCE_DIRECTORY
Reemplaza lo siguiente:
PROJECT_ID
: El proyecto de Google Cloud en el que se encuentra tu instanciaINSTANCE_ID
: el identificador de la instancia de Bigtable a la que deseas importar tus datosREGION
: una región que contiene uno de los clústeres en tu instancia de Bigtable. Ejemplo:northamerica-northeast2
CLUSTER_NUM_NODES
: La cantidad de nodos en tu instancia de BigtableTRANSLATE_JAR
: el nombre y el número de versión del archivo JARbigtable hbase tools
que descargaste de Maven. El valor debe ser similar abigtable-hbase-1.x-tools-1.24.0-jar-with-dependencies.jar
.IMPORT_JAR
: el nombre y el número de versión del archivo JARbigtable-beam-import
que descargaste de Maven. El valor debe ser similar abigtable-beam-import-1.24.0-shaded.jar
.BUCKET_NAME
: Es el nombre del bucket de Cloud Storage en el que almacenas las instantáneas.ZOOKEEPER_QUORUM
: El host del zookeeper al que se conectará la herramienta, en el formatohost1.myownpersonaldomain.com
MIGRATION_SOURCE_DIRECTORY
: el directorio en tu host de HBase que contiene los datos que deseas migrar, en el formatohdfs://host1.myownpersonaldomain.com:8020/hbase
.
Si deseas confirmar que las variables se configuraron de forma correcta, ejecuta el comando
printenv
para ver todas las variables de entorno (opcional).
Deja de enviar operaciones de escritura a HBase
Antes de tomar instantáneas de las tablas de HBase, deja de enviar operaciones de escritura al clúster de HBase.
Toma instantáneas de tablas de HBase
Cuando tu clúster de HBase ya no transfiera datos, toma una instantánea de cada tabla que planees migrar a Bigtable.
Al principio, una instantánea tiene una huella de almacenamiento mínima en el clúster de HBase, pero con el tiempo puede crecer al mismo tamaño que la tabla original. La instantánea no consume ningún recurso de CPU.
Ejecuta el siguiente comando para cada tabla con un nombre único para cada instantánea:
echo "snapshot 'TABLE_NAME', 'SNAPSHOT_NAME'" | hbase shell -n
Reemplaza lo siguiente:
TABLE_NAME
: el nombre de la tabla de HBase desde la que exportas los datos.SNAPSHOT_NAME
: el nombre de la instantánea nueva
Exporta las instantáneas de HBase a Cloud Storage
Después de crear las instantáneas, debes exportarlas. Cuando ejecutas trabajos de exportación en un clúster de HBase de producción, supervisa el clúster y otros recursos de HBase para asegurarte de que los clústeres permanezcan en buen estado.
Para cada instantánea que desees exportar, ejecuta el siguiente comando:
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \
-Dhbase.zookeeper.quorum=$ZOOKEEPER_QUORUM_AND_PORT -snapshot SNAPSHOT_NAME \
-copy-from $MIGRATION_SOURCE_DIRECTORY \
-copy-to $MIGRATION_DESTINATION_DIRECTORY/data
Reemplaza SNAPSHOT_NAME
por el nombre de la instantánea que deseas exportar.
Procesamiento y exportación de hashes
A continuación, crea hashes para usar en la validación una vez que se complete la migración.
HashTable es una herramienta de validación proporcionada por HBase que calcula hashes para rangos de filas y los exporta a archivos. Puedes ejecutar un trabajo de sync-table
en la tabla de destino para hacer coincidir los hashes y ganar confianza en la integridad de los datos migrados.
Ejecuta el siguiente comando para cada tabla que exportaste:
hbase org.apache.hadoop.hbase.mapreduce.HashTable --batchsize=32000 --numhashfiles=20 \
TABLE_NAME $MIGRATION_DESTINATION_DIRECTORY/hashtable/TABLE_NAME
Reemplaza lo siguiente:
TABLE_NAME
: el nombre de la tabla de HBase para la que creaste y exportaste una instantánea
Crea tablas de destino
El paso siguiente consiste en crear una tabla de destino en tu instancia de Bigtable para cada instantánea que exportaste. Usa una cuenta que tenga permiso bigtable.tables.create
para la instancia.
En esta guía, se utiliza el
Herramienta de traducción de esquemas de Bigtable,
que crea automáticamente la tabla por ti. Sin embargo, si no quieres que
de Bigtable para que coincida exactamente con el esquema de HBase, puedes
crear una tabla con la función
La herramienta de línea de comandos de cbt
o la consola de Google Cloud
La herramienta de traducción de esquemas de Bigtable captura el esquema de la tabla de HBase, incluidos el nombre de la tabla, las familias de columnas, las políticas de recolección de elementos no utilizados y las divisiones. Luego, crea una tabla similar en Bigtable.
En cada tabla que desees importar, ejecuta el siguiente comando para copiar el esquema de HBase en Bigtable.
java \
-Dgoogle.bigtable.project.id=$PROJECT_ID \
-Dgoogle.bigtable.instance.id=$INSTANCE_ID \
-Dgoogle.bigtable.table.filter=TABLE_NAME \
-Dhbase.zookeeper.quorum=$ZOOKEEPER_QUORUM \
-Dhbase.zookeeper.property.clientPort=$ZOOKEEPER_PORT \
-jar $TRANSLATE_JAR
Reemplaza TABLE_NAME
por el nombre de la tabla de HBase que deseas importar. La herramienta de traducción de esquemas usa este nombre para tu nueva tabla de Bigtable.
De manera opcional, puedes reemplazar TABLE_NAME
por una expresión regular, como ".*", que capture todas las tablas que deseas crear y, luego, ejecutará el comando solo una vez.
Importa los datos de HBase a Bigtable con Dataflow
Una vez que tengas una tabla lista para migrar tus datos, estarás preparado para importar y validar los datos.
Tablas sin comprimir
Si tus tablas de HBase no están comprimidas, ejecuta el siguiente comando para cada tabla que desees migrar:
java -jar $IMPORT_JAR importsnapshot \
--runner=DataflowRunner \
--project=$PROJECT_ID \
--bigtableInstanceId=$INSTANCE_ID \
--bigtableTableId=TABLE_NAME \
--hbaseSnapshotSourceDir=$MIGRATION_DESTINATION_DIRECTORY/data \
--snapshotName=SNAPSHOT_NAME \
--stagingLocation=$MIGRATION_DESTINATION_DIRECTORY/staging \
--tempLocation=$MIGRATION_DESTINATION_DIRECTORY/temp \
--maxNumWorkers=$(expr 3 \* $CLUSTER_NUM_NODES) \
--region=$REGION
Reemplaza lo siguiente:
TABLE_NAME
: el nombre de la tabla de HBase que deseas importar. La herramienta de traducción de esquemas usa este nombre para tu tabla de Bigtable nueva. No se admiten nombres de tabla nuevos.SNAPSHOT_NAME
: el nombre que asignaste a la instantánea de la tabla que deseas importar.
Después de ejecutar el comando, la herramienta restablece la instantánea de HBase en tu bucket de Cloud Storage y, luego, inicia el trabajo de importación. El proceso de restablecimiento de la instantánea puede tomar varios minutos en completarse según el tamaño de la instantánea.
Ten en cuenta las siguientes sugerencias cuando importes:
- Para mejorar el rendimiento de la carga de datos, asegúrate de establecer
maxNumWorkers
. Este valor ayuda a garantizar que el trabajo de importación tenga suficiente capacidad de procesamiento a fin de completar las tareas en un período razonable, pero no tanto como para que sobrecargue la instancia de Bigtable.- Si no usas la instancia de Bigtable para otra carga de trabajo, multiplica la cantidad de nodos en tu instancia de Bigtable por 3 y usa esa cantidad para
maxNumWorkers
. - Si usas la instancia para otra carga de trabajo al mismo tiempo que importas tus datos de HBase, reduce el valor de
maxNumWorkers
de forma adecuada.
- Si no usas la instancia de Bigtable para otra carga de trabajo, multiplica la cantidad de nodos en tu instancia de Bigtable por 3 y usa esa cantidad para
- Usa el tipo predeterminado de trabajador.
- Durante la importación, debes supervisar el uso de la CPU de la instancia de Bigtable. Si el uso de la CPU en la instancia de Bigtable es demasiado alto, es posible que debas agregar nodos adicionales. Puede tomar hasta 20 minutos que el clúster proporcione el beneficio de rendimiento de nodos adicionales.
Para obtener más información sobre la supervisión de la instancia de Bigtable, consulta Supervisión de una instancia de Bigtable.
Tablas comprimidas de Snappy
Si importas tablas comprimidas de Snappy, debes usar una imagen de contenedor personalizada en la canalización de Dataflow. La imagen de contenedor personalizada que usas para importar datos comprimidos a Bigtable proporciona compatibilidad de la biblioteca de compresión nativa de Hadoop. Debes tener la versión 2.30.0 o posterior del SDK de Apache Beam para usar Dataflow Runner v2 y la versión 2.3.0 o posterior de la biblioteca cliente de HBase para Java.
Para importar tablas comprimidas de Snappy, ejecuta el mismo comando que ejecutas en las tablas sin comprimir, pero agrega la siguiente opción:
--enableSnappy=true
Valida los datos importados en Bigtable
Para validar los datos importados, debes ejecutar el trabajo sync-table
. El trabajo sync-table
calcula los hashes para los rangos de filas en Bigtable y, luego, los hace coincidir con el resultado de HashTable que calculaste antes.
Para ejecutar el trabajo sync-table
, ejecuta lo siguiente en el shell del comando:
java -jar $IMPORT_JAR sync-table \
--runner=dataflow \
--project=$PROJECT_ID \
--bigtableInstanceId=$INSTANCE_ID \
--bigtableTableId=TABLE_NAME \
--outputPrefix=$MIGRATION_DESTINATION_DIRECTORY/sync-table/output-TABLE_NAME-$(date +"%s") \
--stagingLocation=$MIGRATION_DESTINATION_DIRECTORY/sync-table/staging \
--hashTableOutputDir=$MIGRATION_DESTINATION_DIRECTORY/hashtable/TABLE_NAME \
--tempLocation=$MIGRATION_DESTINATION_DIRECTORY/sync-table/dataflow-test/temp \
--region=$REGION
Reemplaza TABLE_NAME
por el nombre de la tabla de HBase que deseas importar.
Cuando el trabajo sync-table
esté completo, abre la página Detalles del trabajo de Dataflow y revisa la sección Contadores personalizados (Custom counters) del trabajo. Si el trabajo de importación importa con éxito todos los datos, el valor de ranges_matched
tiene un valor y el valor de ranges_not_matched
es 0.
Si ranges_not_matched
muestra un valor, abre la página Registros (Logs), elige Registros trabajadores (Worker Logs) y filtra por Mismatch on range. El resultado procesable de estos registros se almacena en Cloud Storage en el destino de salida que creas en la opción outputPrefix
con tabla sincronizada.
Puedes volver a intentar el trabajo de importación o escribir una secuencia de comandos para leer los archivos de salida a fin de determinar dónde se produjeron las discrepancias. Cada línea del archivo de salida es un registro JSON serializado de un rango que no coincide.
Dirige operaciones de escritura a Bigtable
Después de validar los datos de cada tabla del clúster, puedes configurar tus aplicaciones para enrutar todo su tráfico a Bigtable y, luego, dar de baja la instancia de HBase.
Cuando se complete la migración, puedes borrar las instantáneas en la instancia de HBase.
¿Qué sigue?
- Consulta las otras partes de la guía de migración de Hadoop:
- Descripción general
- Guía de migración de datos
- Guía de migración de trabajos
- Obtén más información sobre Cloud Storage.