Migrar desde HBase alojado en Google Cloud
En esta página se describen los aspectos y procesos que se deben tener en cuenta para migrar a Bigtable desde un clúster de Apache HBase alojado en unGoogle Cloud servicio, como Dataproc o Compute Engine.
Para obtener información sobre la migración offline de un entorno de Apache HBase externo a Bigtable, consulta el artículo Migrar datos de HBase a Bigtable offline. Para la migración online, consulta Replicar de HBase a Bigtable.
Motivos para migrar de HBase en Google Cloud a Bigtable
Estos son algunos de los motivos por los que podrías elegir esta ruta de migración:
- Puedes dejar tu aplicación cliente donde esté implementada actualmente y cambiar solo la configuración de la conexión.
- Tus datos permanecen en el Google Cloud ecosistema.
- Puedes seguir usando la API de HBase si quieres. El cliente de HBase de Cloud Bigtable para Java es una extensión totalmente compatible de la biblioteca de Apache HBase para Java.
- Quieres disfrutar de las ventajas de usar un servicio gestionado para almacenar tus datos.
Cuestiones importantes
En esta sección, se sugieren algunas cosas que debes revisar y tener en cuenta antes de empezar la migración.
Diseño de esquemas de Bigtable
En la mayoría de los casos, puedes usar el mismo diseño de esquema en Bigtable que en HBase. Si quieres cambiar tu esquema o si tu caso de uso va a cambiar, consulta los conceptos que se explican en Diseñar tu esquema antes de migrar tus datos.
Preparación y pruebas
Antes de migrar los datos, asegúrese de que conoce las diferencias entre HBase y Bigtable. Deberías dedicar un tiempo a aprender a configurar tu conexión para conectar tu aplicación a Bigtable. Además, puede que quieras hacer pruebas funcionales y del sistema antes de la migración para validar la aplicación o el servicio.
Pasos de la migración
Para migrar los datos de HBase a Bigtable, haz una captura de HBase e importa los datos directamente del clúster de HBase a Bigtable. Estos pasos son para un solo clúster de HBase y se describen en detalle en las siguientes secciones.
- Dejar de enviar operaciones de escritura a HBase.
- Crea tablas de destino en Bigtable.
- Haz capturas de HBase e impórtalas a Bigtable.
- Valide los datos importados.
- Actualiza la aplicación para enviar lecturas y escrituras a Bigtable.
Antes de empezar
Crea un segmento de Cloud Storage para almacenar los datos de salida de la validación. Crea el segmento en la misma ubicación en la que vayas a ejecutar tu tarea de Dataproc.
Identifique el clúster de Hadoop desde el que va a migrar. Debes ejecutar los trabajos de migración en un clúster de Dataproc 1.x que tenga conectividad de red con el nodo de nombres y los nodos de datos del clúster de HBase. Anota la dirección del quórum de ZooKeeper y el URI del nodo de nombres del clúster de HBase, que son necesarios para las secuencias de comandos de migración.
Crea un clúster de Dataproc versión 1.x en la misma red que el clúster de HBase de origen. Este clúster se usa para ejecutar las tareas de importación y validación.
Crea una instancia de Bigtable para almacenar las nuevas tablas. Al menos un clúster de la instancia de Bigtable también debe estar en la misma región que el clúster de Dataproc. Ejemplo:
us-central1
Obtén la herramienta Traducción de esquemas:
wget BIGTABLE_HBASE_TOOLS_URL
Sustituye
BIGTABLE_HBASE_TOOLS_URL
por la URL de la versiónJAR 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/2.6.0/bigtable-hbase-1.x-tools-2.6.0-jar-with-dependencies.jar
.Para encontrar la URL o descargar el archivo JAR manualmente, siga estos pasos:
- Ve al repositorio.
- Haz clic en Examinar para ver los archivos del repositorio.
- Haz clic en el número de la versión más reciente.
- Identifica el
JAR with dependencies file
(normalmente 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 MapReduce, que usarás para las tareas de importación y validación:
wget BIGTABLE_MAPREDUCE_URL
Sustituye
BIGTABLE_MAPREDUCE_URL
por la URL de la versiónshaded-byo 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-hbase-1.x-mapreduce/2.6.0/bigtable-hbase-1.x-mapreduce-2.6.0-shaded-byo-hadoop.jar
.Para encontrar la URL o descargar el archivo JAR manualmente, sigue estos pasos:
- Ve al repositorio.
- Haz clic en el número de la versión más reciente.
- Haz clic en Descargas.
- Coloca el cursor sobre shaded-byo-hadoop.jar.
- Haz clic con el botón derecho y copia la URL, o haz clic para descargar el archivo.
Define las siguientes variables de entorno:
#Google Cloud export PROJECT_ID=PROJECT_ID export REGION=REGION ##Cloud Bigtable export BIGTABLE_INSTANCE_ID=BIGTABLE_INSTANCE_ID ##Dataproc export DATAPROC_CLUSTER_ID=DATAPROC_CLUSTER_NAME #Cloud Storage export BUCKET_NAME="gs://BUCKET_NAME" export STORAGE_DIRECTORY="$BUCKET_NAME/hbase-migration" #HBase export ZOOKEEPER_QUORUM=ZOOKEPER_QUORUM export ZOOKEEPER_PORT=2181 export ZOOKEEPER_QUORUM_AND_PORT="$ZOOKEEPER_QUORUM:$ZOOKEEPER_PORT" export MIGRATION_SOURCE_NAMENODE_URI=MIGRATION_SOURCE_NAMENODE_URI export MIGRATION_SOURCE_TMP_DIRECTORY=${MIGRATION_SOURCE_NAMENODE_URI}/tmp export MIGRATION_SOURCE_DIRECTORY=${MIGRATION_SOURCE_NAMENODE_URI}/hbase #JAR files export TRANSLATE_JAR=TRANSLATE_JAR export MAPREDUCE_JAR=MAPREDUCE_JAR
Sustituye los marcadores de posición por los valores de tu migración.
Google Cloud:
PROJECT_ID
: el Google Cloud proyecto en el que se encuentra tu instancia de BigtableREGION
: la región que contiene el clúster de Dataproc que ejecutará las tareas de importación y validación.
Bigtable:
BIGTABLE_INSTANCE_ID
: identificador de la instancia de Bigtable a la que vas a importar los datos.
Dataproc:
DATAPROC_CLUSTER_ID
: el ID del clúster de Dataproc que ejecutará las tareas de importación y validación.
Cloud Storage:
BUCKET_NAME
: el nombre del segmento de Cloud Storage en el que almacenas tus copias de seguridad
HBase:
ZOOKEEPER_QUORUM
: el host de ZooKeeper al que se conectará la herramienta, con el formatohost1.myownpersonaldomain.com
MIGRATION_SOURCE_NAMENODE_URI
: el URI del Namenode de tu clúster de HBase, con el formatohdfs://host1.myownpersonaldomain.com:8020
Archivos JAR
TRANSLATE_JAR
: el nombre y el número de versión del archivo JARbigtable hbase tools
que has descargado de Maven. El valor debe ser similar abigtable-hbase-1.x-tools-2.6.0-jar-with-dependencies.jar
.MAPREDUCE_JAR
: el nombre y el número de versión del archivo JARbigtable hbase mapreduce
que has descargado de Maven. El valor debe ser similar abigtable-hbase-1.x-mapreduce-2.6.0-shaded-byo-hadoop.jar
.
(Opcional) Para confirmar que las variables se han definido correctamente, ejecuta el comando
printenv
para ver todas las variables de entorno.
Dejar de enviar operaciones de escritura a HBase
Antes de hacer copias de tus tablas de HBase, deja de enviar escrituras a tu clúster de HBase.
Crear tablas de destino en Bigtable
El siguiente paso es crear una tabla de destino en tu instancia de Bigtable para cada tabla de HBase que vayas a migrar. Usa una cuenta que tenga permiso bigtable.tables.create
para la instancia.
En esta guía se usa la herramienta de traducción de esquemas de Bigtable, que crea la tabla automáticamente. Sin embargo, si no quieres que tu esquema de Bigtable coincida exactamente con el esquema de HBase, puedes crear una tabla con la CLI 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, incluido el nombre de la tabla, las familias de columnas, las políticas de recogida de elementos no utilizados y las divisiones. A continuación, crea una tabla similar en Bigtable.
En cada tabla que quieras importar, ejecuta el siguiente comando para copiar el esquema de HBase a Bigtable.
java \
-Dgoogle.bigtable.project.id=$PROJECT_ID \
-Dgoogle.bigtable.instance.id=$BIGTABLE_INSTANCE_ID \
-Dgoogle.bigtable.table.filter=TABLE_NAME \
-Dhbase.zookeeper.quorum=$ZOOKEEPER_QUORUM \
-Dhbase.zookeeper.property.clientPort=$ZOOKEEPER_PORT \
-jar $TRANSLATE_JAR
Sustituye TABLE_NAME
por el nombre de la tabla de HBase que vas a importar. La herramienta Traducción de esquemas usa este nombre para la nueva tabla de Bigtable.
También puedes sustituir TABLE_NAME
por una expresión regular, como ".*", que capture todas las tablas que quieras crear y, a continuación, ejecutar el comando solo una vez.
Hacer capturas de tablas de HBase e importarlas a Bigtable
Complete los siguientes pasos para cada tabla que quiera migrar a Bigtable.
Ejecuta el siguiente comando:
echo "snapshot 'HBASE_TABLE_NAME', 'HBASE_SNAPSHOT_NAME'" | hbase shell -n
Haz los cambios siguientes:
HBASE_TABLE_NAME
: el nombre de la tabla de HBase a la que vas a migrar los datos de Bigtable.HBASE_SNAPSHOT_NAME
: nombre único de la nueva instantánea.
Importa la instantánea ejecutando el siguiente comando:
gcloud dataproc jobs submit hadoop \ --cluster $DATAPROC_CLUSTER_ID \ --region $REGION \ --project $PROJECT_ID \ --jar $MAPREDUCE_JAR \ -- \ import-snapshot \ -Dgoogle.bigtable.project.id=$PROJECT_ID \ -Dgoogle.bigtable.instance.id=$BIGTABLE_INSTANCE_ID \ HBASE_SNAPSHOT_NAME \ $MIGRATION_SOURCE_DIRECTORY \ BIGTABLE_TABLE_NAME \ $MIGRATION_SOURCE_TMP_DIRECTORY
Haz los cambios siguientes:
HBASE_SNAPSHOT_NAME
: el nombre que has asignado a la instantánea de la tabla que vas a importarBIGTABLE_TABLE_NAME
: el nombre de la tabla de Bigtable a la que vas a importar
Después de ejecutar el comando, la herramienta restaura la instantánea de HBase en el clúster de origen y, a continuación, la importa. El proceso de restauración de la instantánea puede tardar varios minutos en completarse, en función del tamaño de la instantánea.
Cuando importes los datos, tendrás las siguientes opciones adicionales:
Define los tiempos de espera basados en el cliente para las solicitudes de mutación almacenadas en búfer (el valor predeterminado es 600.000 ms). Consulta el siguiente ejemplo:
-Dgoogle.bigtable.rpc.use.timeouts=true -Dgoogle.bigtable.mutate.rpc.timeout.ms=600000
Considera la posibilidad de usar la limitación basada en la latencia, que puede reducir el impacto que la tarea de importación por lotes puede tener en otras cargas de trabajo. Debes probar la limitación de la velocidad en tu caso práctico de migración. Consulta el siguiente ejemplo:
-Dgoogle.bigtable.buffered.mutator.throttling.enable=true -Dgoogle.bigtable.buffered.mutator.throttling.threshold.ms=100
Modifica el número de tareas de mapa que leen una sola región de HBase (el valor predeterminado es 2 tareas de mapa por región). Consulta el siguiente ejemplo:
-Dgoogle.bigtable.import.snapshot.splits.per.region=3
Defina configuraciones adicionales de MapReduce como propiedades. Consulta el siguiente ejemplo:
-Dmapreduce.map.maxattempts=4 -Dmapreduce.map.speculative=false -Dhbase.snapshot.thread.pool.max=20
Ten en cuenta los siguientes consejos al importar:
- Para mejorar el rendimiento de la carga de datos, asegúrese de tener suficientes trabajadores del clúster de Dataproc para ejecutar tareas de importación de mapas en paralelo. De forma predeterminada, un trabajador de Dataproc n1-standard-8 ejecutará ocho tareas de importación. Si hay suficientes trabajadores, la tarea de importación tendrá suficiente potencia de cálculo para completarse en un plazo razonable, pero no tanta como para sobrecargar la instancia de Bigtable.
- Si no usas la instancia de Bigtable para otra carga de trabajo, multiplica el número de nodos de tu instancia de Bigtable por 3 y, después, divide el resultado entre 8 (con el trabajador de Dataproc n1-standard-8). Usa result como número de trabajadores de Dataproc.
- Si usas la instancia para otra carga de trabajo al mismo tiempo que importas tus datos de HBase, reduce el valor de los trabajadores de Dataproc o aumenta el número de nodos de Bigtable para cumplir los requisitos de las cargas de trabajo.
- Durante la importación, debes monitorizar el uso de CPU de la instancia de Bigtable. Si la utilización de la CPU en la instancia de Bigtable es demasiado alta, puede que tengas que añadir más nodos. Si añades nodos, el uso de la CPU mejorará de inmediato, pero el clúster puede tardar hasta 20 minutos en alcanzar un rendimiento óptimo después de que se hayan añadido los nodos.
Para obtener más información sobre cómo monitorizar la instancia de Bigtable, consulta Monitorizar una instancia de Bigtable.
Validar los datos importados en Bigtable
A continuación, valida la migración de datos realizando una comparación de hash entre la tabla de origen y la de destino para comprobar la integridad de los datos migrados. Primero, ejecuta el trabajo hash-table
para generar los hashes de los intervalos de filas de la tabla de origen. A continuación, completa la validación ejecutando el sync-table
para calcular y comparar los hashes de Bigtable con la fuente.
Para crear los hashes que se usarán en la validación, ejecuta el siguiente comando para cada tabla que vayas a migrar:
gcloud dataproc jobs submit hadoop \ --project $PROJECT_ID \ --cluster $DATAPROC_CLUSTER_ID \ --region $REGION \ --jar $MAPREDUCE_JAR \ -- \ hash-table \ -Dhbase.zookeeper.quorum=$ZOOKEEPER_QUORUM_AND_PORT \ HBASE_TABLE_NAME \ $STORAGE_DIRECTORY/HBASE_TABLE_NAME/hash-output/
Sustituye
HBASE_TABLE_NAME
por el nombre de la tabla de HBase para la que has creado la instantánea.Ejecuta lo siguiente en el shell de comandos:
gcloud dataproc jobs submit hadoop \ --project $PROJECT_ID \ --cluster $DATAPROC_CLUSTER_ID \ --region $REGION \ --jar $MAPREDUCE_JAR \ -- \ sync-table \ --sourcezkcluster=$ZOOKEEPER_QUORUM_AND_PORT:/hbase \ --targetbigtableproject=$PROJECT_ID \ --targetbigtableinstance=$BIGTABLE_INSTANCE_ID \ $STORAGE_DIRECTORY/HBASE_TABLE_NAME/hash-output/ \ HBASE_TABLE_NAME \ BIGTABLE_TABLE_NAME
Haz los cambios siguientes:
HBASE_TABLE_NAME
: el nombre de la tabla de HBase de la que vas a importar datosBIGTABLE_TABLE_NAME
: el nombre de la tabla de Bigtable a la que vas a importar
Si quieres habilitar la sincronización entre la fuente y el destino para los intervalos de hash divergentes, puedes añadir --dryrun=false
al comando.
Cuando se complete el trabajo de sync-table
, los contadores del trabajo se mostrarán en la consola Google Cloud donde se haya ejecutado el trabajo. Si el trabajo de importación importa correctamente todos los datos, el valor de HASHES_MATCHED
tendrá un valor y el de HASHES_NOT_MATCHED
será 0.
Si HASHES_NOT_MATCHED
muestra un valor, puede volver a ejecutar sync-table
en modo de depuración para emitir los intervalos divergentes y los detalles a nivel de celda, como Source missing cell
, Target missing cell
o Different values
. Para habilitar el modo de depuración, configure --properties mapreduce.map.log.level=DEBUG
. Una vez que se haya ejecutado el trabajo, usa Cloud Logging y busca la expresión jsonPayload.class="org.apache.hadoop.hbase.mapreduce.SyncTable"
para revisar las celdas que divergen.
Puedes volver a intentar la importación o usar SyncTable para sincronizar las tablas de origen y de destino configurando dryrun=false
. Consulta HBase SyncTable y otras opciones de configuración antes de continuar.
Actualizar la aplicación para que envíe lecturas y escrituras a Bigtable
Una vez que hayas validado los datos de cada tabla del clúster, puedes configurar tus aplicaciones para que dirijan todo su tráfico a Bigtable y, a continuación, retirar el clúster de HBase.
Cuando se haya completado la migración, puedes eliminar las copias de seguridad.