Migra desde HBase en Google Cloud
En esta página, se describen las consideraciones y los procesos para migrar a Bigtable desde un clúster de Apache HBase alojado en un servicio de Google Cloud, como Dataproc o Compute Engine.
Para obtener orientación sobre cómo migrar de un entorno externo de Apache HBase a Bigtable, consulta Migra datos de HBase a Bigtable Para obtener más información sobre la migración en línea, consulta Cómo replicar de HBase a Bigtable
Por qué migrar de HBase en Google Cloud a Bigtable
Entre los motivos por los que puedes elegir esta ruta de migración, se incluyen los siguientes:
- 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 ecosistema de Google Cloud.
- Si lo deseas, puedes seguir usando la API de HBase. La guía de Cloud Bigtable Cliente de HBase para Java es una extensión totalmente compatible de la clase Apache Biblioteca de HBase para Java.
- Quieres los beneficios de usar un servicio administrado para almacenar tus datos.
Consideraciones
En esta sección, se sugieren algunos aspectos que se deben revisar y considerar antes de comenzar la migración.
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.
Preparación y pruebas
Antes de migrar tus datos, asegúrate de comprender las diferencias entre HBase y Bigtable. Deberías dedicar algún tiempo a aprender a configurar tu conexión. para conectar tu aplicación a Bigtable. Además, puedes desean realizar pruebas funcionales y de sistema antes de la migración validar la aplicación o el servicio.
Pasos para la migración
Para migrar tus datos de HBase a Bigtable, debes tomar una instantánea de HBase y, luego, importar los datos directamente desde el clúster de HBase a Bigtable. Estos pasos son para un solo clúster de HBase que se describe en detalle en las próximas secciones.
- Deja de enviar escrituras a HBase.
- Crea tablas de destino en Bigtable.
- Tomar instantáneas de HBase y, luego, importarlas a Bigtable.
- Valida los datos importados.
- Actualiza la aplicación para enviar operaciones de lectura y escritura Bigtable.
Antes de comenzar
Instala Google Cloud CLI o usar Cloud Shell.
Crea un bucket de Cloud Storage para y almacenarás tus datos de salida de validación. Crea el bucket en la misma ubicación en la que planeas ejecutar tu trabajo de Dataproc.
Identifica el clúster de Hadoop desde el que migrarás. Debes ejecutar los trabajos para tu migración en un clúster de Dataproc 1.x que tenga conectividad con el Namenode y Datanodes del clúster de HBase. Toma nota de la La dirección de quórum de ZooKeeper y el URI de Namenode 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 origen de HBase. Usas este clúster para ejecutar las tareas de importación y validación.
Crea una instancia de Bigtable para almacenar tus tablas nuevas. Al menos un clúster en Bigtable la instancia también debe estar en la misma región que clúster. Ejemplo:
us-central1
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/2.6.0/bigtable-hbase-1.x-tools-2.6.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 Browse (Explorar) para ver los archivos del 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 MapReduce, que usarás para los trabajos de importación y validación:
wget BIGTABLE_MAPREDUCE_URL
Reemplaza
BIGTABLE_MAPREDUCE_URL
por la URL del elementoshaded-byo JAR
más reciente disponible en la Repositorio de Maven. 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 de forma manual, haz lo siguiente:
- Ir al repositorio.
- Haz clic en el número de versión más reciente.
- Presiona Descargas.
- Pasa el mouse sobre shaded-byo-hadoop.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 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
Reemplaza los marcadores de posición por los valores de tu migración.
Google Cloud:
PROJECT_ID
: Es el proyecto de Google Cloud que tu instancia de Bigtable se encuentra enREGION
: Es la región que contiene la Clúster de Dataproc que ejecutará los trabajos de importación y validación.
Bigtable:
BIGTABLE_INSTANCE_ID
: el identificador de la instancia de Bigtable a la que deseas importar tus datos
Dataproc:
DATAPROC_CLUSTER_ID
: Es el ID del clúster de Dataproc que ejecutará los trabajos de importación y validación.
Cloud Storage:
BUCKET_NAME
: Es el nombre del bucket de Cloud Storage en el que almacenas las instantáneas.
HBase:
ZOOKEEPER_QUORUM
: el host de ZooKeeper al que la herramienta a la que se conectará, en el formatohost1.myownpersonaldomain.com
MIGRATION_SOURCE_NAMENODE_URI
: Es el URI de tu Namenode del clúster de HBase, en 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 descargaste 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 descargaste de Maven. El valor debe ser similar abigtable-hbase-1.x-mapreduce-2.6.0-shaded-byo-hadoop.jar
.
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.
Crea tablas de destino en Bigtable
El siguiente paso es crear una tabla de destino en Bigtable
para cada tabla de HBase que estés migrando. 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 de forma automática. 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
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, 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=$BIGTABLE_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.
También puedes reemplazar TABLE_NAME
por una
una expresión regular, como “.*”, que captura todas las tablas en las que quieres
create y, luego, ejecuta el comando solo una vez.
Toma instantáneas de tablas de HBase y, luego, impórtalas a Bigtable
Completa lo siguiente para cada tabla a la que planeas migrar en Bigtable.
Ejecuta el siguiente comando:
echo "snapshot 'HBASE_TABLE_NAME', 'HBASE_SNAPSHOT_NAME'" | hbase shell -n
Reemplaza lo siguiente:
HBASE_TABLE_NAME
: Es el nombre de la tabla de HBase que migrarás a Bigtable.HBASE_SNAPSHOT_NAME
: Es el nombre único de la instantánea nueva.
Ejecuta el siguiente comando para importar la instantánea:
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
Reemplaza lo siguiente:
HBASE_SNAPSHOT_NAME
: el nombre que asignaste a la instantánea de la tabla que deseas importar.BIGTABLE_TABLE_NAME
: Es el nombre de la tabla de Bigtable a la que deseas importar.
Luego de que ejecutes el comando, la herramienta restablecerá la instantánea de HBase en la fuente clúster y, luego, lo importa. El proceso de conversión puede tardar varios restablecer la instantánea para finalizar, según su tamaño.
Las siguientes opciones adicionales están disponibles cuando importas los datos:
Establece tiempos de espera basados en el cliente para las solicitudes de mutador almacenadas en búfer (predeterminado 600,000 ms). Consulta el siguiente ejemplo:
-Dgoogle.bigtable.rpc.use.timeouts=true -Dgoogle.bigtable.mutate.rpc.timeout.ms=600000
Considera la limitación basada en latencia, que puede reducir el impacto que trabajo por lotes de importación podría tener en otras cargas de trabajo. Se debe probar la regulación para tu caso de uso de migración. Consulta el siguiente ejemplo:
-Dgoogle.bigtable.buffered.mutator.throttling.enable=true -Dgoogle.bigtable.buffered.mutator.throttling.threshold.ms=100
Modifica la cantidad de tareas de asignación que leen una sola región de HBase (mapa 2 predeterminado) tareas por región). Consulta el siguiente ejemplo:
-Dgoogle.bigtable.import.snapshot.splits.per.region=3
Establece configuraciones adicionales de MapReduce como propiedades. Consulta la siguiente ejemplo:
-Dmapreduce.map.maxattempts=4 -Dmapreduce.map.speculative=false -Dhbase.snapshot.thread.pool.max=20
Ten en cuenta las siguientes sugerencias cuando realices importaciones:
- Para mejorar el rendimiento de la carga de datos, asegúrate de tener suficientes
Trabajadores del clúster de Dataproc para ejecutar tareas de importación de mapas en paralelo. De
de forma predeterminada, un trabajador de Dataproc n1-standard-8 ejecutará ocho
tareas. Tener suficientes trabajadores garantiza que el trabajo de importación tenga suficientes trabajadores
poder completarse en un tiempo
razonable, pero no tanta potencia como para
a la instancia de Bigtable.
- Si no usas la instancia de Bigtable para otro de trabajo, multiplica la cantidad de nodos en tu por 3, luego dividir por 8 (con n1-standard-8 dataproc worker). Usa resultado como la cantidad de trabajadores de Dataproc.
- Si usas la instancia para otra carga de trabajo al mismo tiempo que que importas tus datos de HBase, reduce el valor de trabajadores de Dataproc o aumentar la cantidad de de Bigtable para cumplir con las cargas de trabajo y los requisitos de cumplimiento.
- Durante la importación, debes supervisar el uso de la CPU de la instancia de Bigtable. Si el valor de uso de CPU en la instancia de Bigtable es demasiado alto, tal vez debas agregar nodos adicionales. Agregar nodos mejora el uso de CPU de inmediato, pero puede puede pasar hasta 20 minutos desde que se agregan los nodos para que el clúster alcance rendimiento.
Para obtener más información sobre cómo supervisar la instancia de Bigtable, consulta Cómo supervisar una instancia de Bigtable .
Valida los datos importados en Bigtable
A continuación, valida la migración de datos realizando una comparación de hash entre los
de origen y destino para ganar confianza con respecto a la integridad de la
datos migrados. Primero, ejecuta el trabajo hash-table
para generar hashes de rangos de filas
en la tabla de origen. Luego, ejecuta el comando sync-table
para completar la validación.
para procesar y hacer coincidir los hashes de Bigtable con la fuente.
Para crear hashes y usarlos en la validación, ejecuta el siguiente comando para cada uno tabla que estás migrando:
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/
Reemplaza
HBASE_TABLE_NAME
por el nombre. de la tabla de HBase para la que creaste la instantánea.Ejecuta lo siguiente en la 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
Reemplaza lo siguiente:
HBASE_TABLE_NAME
: Es el nombre de HBase. de la tabla desde donde quieres importarBIGTABLE_TABLE_NAME
: Es el nombre de la Tabla de Bigtable a la que importas
De manera opcional, puedes agregar --dryrun=false
al comando si quieres habilitar
y la sincronización entre la fuente y el objetivo
para los rangos de hash divergentes.
Cuando se completa el trabajo sync-table
, los contadores del trabajo se muestran en
la consola de Google Cloud
en la que se ejecutó el trabajo. Si el trabajo de importación
importa correctamente todos los datos, el valor de HASHES_MATCHED
tiene un
valor y el de HASHES_NOT_MATCHED
es 0.
Si HASHES_NOT_MATCHED
muestra un valor, puedes volver a ejecutar sync-table
en la depuración.
para emitir los rangos divergentes y los detalles del nivel de celda, como
Source missing cell
, Target missing cell
o Different values
. Para habilitar el modo de depuración, configura --properties mapreduce.map.log.level=DEBUG
. Después del
se ejecute un trabajo, usa Cloud Logging y busca la expresión
jsonPayload.class="org.apache.hadoop.hbase.mapreduce.SyncTable"
para revisar
células divergentes.
Puedes intentar el trabajo de importación de nuevo o usar SyncTable para sincronizar el origen y
tablas de destino configurando dryrun=false
. Revisa HBase SyncTable y las opciones de configuración adicionales antes de continuar.
Actualiza la aplicación para enviar operaciones de lectura y escritura a Bigtable
Después de validar los datos para cada tabla del clúster, puedes configura tus aplicaciones para enrutar su tráfico a Bigtable y, luego, dar de baja el clúster de HBase.
Cuando se complete la migración, puedes borrar las instantáneas.