Migra datos de HBase a Cloud Bigtable

En este artículo, se describen las consideraciones y los procesos para migrar datos de un clúster de Apache HBase a un clúster de Cloud Bigtable en Google Cloud Platform (GCP).

Antes de comenzar esta migración, debes considerar las implicaciones de rendimiento, el diseño del esquema de Cloud Bigtable, las implicaciones para tu enfoque de autenticación y autorización, y el conjunto de características de Cloud Bigtable.

Implicaciones de rendimiento

Con una carga de trabajo típica, Cloud Bigtable ofrece un rendimiento muy predecible. Cuando todo se ejecuta sin problemas, puedes esperar alcanzar el siguiente rendimiento para cada nodo en tu clúster de Cloud Bigtable, según el tipo de almacenamiento que use tu clúster.

Tipo de almacenamiento Lecturas   Escrituras Análisis
SSD 10,000 filas por segundo a 6 ms o 10,000 filas por segundo a 6 ms 220 MB/s
HDD 500 filas por segundo a 200 ms o 10,000 filas por segundo a 50 ms 180 MB/s

Las estimaciones que se muestran en la lista se basan en filas que contienen 1 KB de datos. También reflejan una carga de trabajo de solo lectura o solo escritura. El rendimiento para una carga de trabajo combinada de lecturas y escrituras puede variar.

Estos números de rendimiento son solo para guiarte, no son reglas estrictas. El rendimiento por nodo puede variar según tu carga de trabajo y el tamaño de valor típico de una solicitud o una respuesta. Para obtener más información, consulta Comprensión del rendimiento de Cloud BigTable.

Diseño del esquema de Cloud Bigtable

Diseñar un esquema en Cloud Bigtable no es como diseñar un esquema para una base de datos relacional. Antes de diseñar tu esquema, revisa los conceptos presentados en Diseño de tu esquema.

También debes mantener el esquema por debajo de los límites de tamaño recomendados. Como guía, mantén las filas individuales por debajo de los 100 MB y los valores individuales por debajo de los 10 MB. Puede haber situaciones en las que debas almacenar grandes valores. El almacenamiento de valores grandes puede afectar el rendimiento, ya que extraerlos requiere tiempo y memoria. Evalúa esas situaciones caso por caso.

Autenticación y autorización

Antes de diseñar el control de acceso para Cloud Bigtable, revisa los procesos de autenticación y autorización de HBase existentes.

Cloud Bigtable usa los mecanismos para la autenticación estándar de GCP y Cloud Identity and Access Management a fin de proporcionar control de acceso, de modo que conviertes tu autorización actual en HBase a Cloud IAM. Puedes asignar los grupos de Hadoop existentes que proporcionan mecanismos de control de acceso para HBase a cuentas de servicio diferentes.

Cloud Bigtable te permite controlar el acceso a nivel de instancia, pero no proporciona un control preciso a nivel de tabla. Una forma de proporcionar nivel de detalle a nivel de tabla es agrupar tablas que tengan patrones de acceso similares en una instancia de Cloud Bigtable. Pero este enfoque podría significar que necesitarás usar varias instancias de Cloud Bigtable para migrar todas tus tablas.

Para obtener más información, consulta Control de acceso.

Migra de HBase a Cloud Bigtable

Para migrar tus datos de HBase a Cloud Bigtable, exportas los datos como una serie de archivos de secuencia de Hadoop. Este es un formato de archivo usado por HBase que consta de pares clave-valor binarios.

Para migrar la tabla de HBase a Cloud Bigtable, sigue estos pasos:

  1. Recoge detalles de HBase.
  2. Exporta tablas de HBase a archivos de secuencia.
  3. Mueve los archivos de secuencia a Cloud Storage.
  4. Importa los archivos de secuencia a Cloud Bigtable mediante Cloud Dataflow.
  5. Valida el movimiento.

Planea la migración: recoge detalles de HBase

A fin de prepararte para la migración, recopila la siguiente información del clúster de HBase existente, ya que la necesitarás para crear la tabla de destino.

  • Lista de tablas
  • Recuentos de filas
  • Recuentos de celdas
  • Detalles de la familia de columnas (incluidos el período de vida, la cantidad máxima de versiones)

Una forma fácil de recopilar estos detalles en una tabla de origen es usar la siguiente secuencia de comandos que deja el resultado en HDFS:

#!/usr/bin/env bash
# Table Name is the Source HBase Table Name
TABLENAME="$1"
# Export Directory will be located on HDFS
EXPORTDIR="$2"
hadoop fs -mkdir -p ${EXPORTDIR}
hbase shell << EOQ
describe ${TABLENAME}
EOQ | hadoop fs -put - ${EXPORTDIR}/${TABLENAME}-schema.json
hbase shell << EOQ
get_splits ${TABLENAME}
EOQ | hadoop fs -put - ${EXPORTDIR}/${TABLENAME}-splits.txt

Exporta la tabla de HBase a Cloud Storage

Cuando sepas los conceptos básicos de las tablas de HBase que se van a migrar, debes exportar la tabla a los archivos de secuencia y moverlos a Cloud Storage. Antes de comenzar a migrar cualquier información en línea, ejecuta los siguientes pasos a fin de asegurarte de que tu clúster cumpla con los requisitos previos para acceder a GCP:

  • Instala el conector de Cloud Storage.

    Si deseas migrar datos en línea mediante distcp, debes instalar y configurar el conector de Cloud Storage. Primero, identifica el sistema de archivos de HDFS que administra los datos que deseas migrar. Luego determina qué nodo de cliente en tu clúster de Hadoop tiene acceso a este sistema de archivos. Por último, instala el conector en el nodo de cliente. Para obtener más detalles sobre los pasos de instalación, consulta Instala el conector de Cloud Storage.

  • Instala el SDK de Cloud

    Para migrar datos con distcp o gsutil, instala el SDK de Cloud en el nodo de cliente del clúster de Hadoop en el que se iniciará la migración. Para obtener más detalles sobre los pasos de instalación, consulta la documentación del SDK de Cloud.

Exporta la tabla de HBase a HDFS

Después exporta la tabla de HBase que deseas migrar a alguna parte de tu clúster de Hadoop. Supongamos que el nombre de tu tabla de HBase es [MY_NEW_TABLE]. El directorio de destino está en tu directorio de usuarios en HDFS. Exporta la tabla de HBase como archivos de secuencia con los siguientes comandos:

TABLENAME="my-new-table"
EXPORTDIR=/usr/[USERNAME]/hbase-${TABLENAME}-export
hadoop fs -mkdir -p ${EXPORTDIR}
MAXVERSIONS=2147483647
cd ${HBASE_HOME}
bin/hbase org.apache.hadoop.hbase.mapreduce.Export my-new-table \
    /user/hbase-${TABLENAME} \
    -export ${MAXVERSIONS}
bin/hbase org.apache.hadoop.hbase.mapreduce.Export \
    -Dmapred.output.compress=true \
    -Dmapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec \
    -DRAW_SCAN=true \
    -Dhbase.client.scanner.caching=100 \
    -Dmapred.map.tasks.speculative.execution=false \
    -Dmapred.reduce.tasks.speculative.execution=false \
    ${TABLENAME} ${EXPORTDIR} ${MAXVERSIONS}

Migra los archivos de secuencia de HDFS a Cloud Storage

El paso siguiente es mover los archivos de secuencia a un depósito de Cloud Storage. Según el tamaño y la fuente de los datos, la cantidad de archivos y el ancho de banda disponible, puedes elegir la opción adecuada para mover archivos de secuencia a Cloud Storage: Transfer Appliance, distcp, gsutil, o el Servicio de transferencia de almacenamiento.

Usa Transfer Appliance

Usa Transfer Appliance para migrar tus datos cuando suceda lo siguiente:

  • Quieres controlar el ancho de banda saliente de forma programada
  • El tamaño de los datos es mayor a 20 TB

Con esta opción, no necesitas comprar o aprovisionar una red adicional con Google. El tiempo de transferencia de extremo a extremo (tiempo de envío del dispositivo, rehidratación, etc.) promedia los 100 Mbps.

Para mover datos con Transfer Appliance, copia los archivos de secuencia y, luego, envía el dispositivo a Google. Google carga los datos en GCP. Para obtener más información, consulta esta documentación de Transfer Appliance.

Usa distcp

Usa distcp para migrar tus datos cuando suceda lo siguiente:

  • Hay más de 100 Mbps de ancho de banda disponibles para la migración.
  • El conector de Cloud Storage y el SDK de Cloud se pueden instalar en el entorno de origen de Hadoop.
  • La administración de un trabajo de Hadoop nuevo para realizar la migración de datos es aceptable.
  • El tamaño de los datos es menor que 20 TB.

Si quieres mover datos con distcp, usa tu nodo de cliente del clúster de Hadoop configurado con el conector de Cloud Storage para enviar un trabajo de MapReduce que copie los archivos de secuencia en Cloud Storage:

hadoop distcp hdfs://[NAMENODE]:[NAMENODE_PORT]/[SOURCE_DIRECTORY] \
gs://[BUCKET]/DESTINATION_DIRECTORY]

Usa gsutil

Usa gsutil para migrar tus datos cuando suceda lo siguiente:

  • Hay más de 100 Mbps de ancho de banda disponibles para la migración.
  • El SDK de Cloud se puede instalar en el entorno de origen de Hadoop.
  • La administración de un trabajo de Hadoop nuevo para realizar la migración de datos no es aceptable.
  • El tamaño de los datos es menor que 10 TB.

Para mover datos con gsutil, usa el nodo de cliente del clúster de Hadoop a fin de iniciar la migración de los datos:

TABLENAME="my-new-table"
EXPORTDIR=/usr/[USERNAME]/hbase-${TABLENAME}-export
gsutil -m cp -r  ${EXPORTDIR} gs://[BUCKET]

Usa el servicio de transferencia de almacenamiento

Usa el servicio de transferencia de almacenamiento para migrar tus datos cuando suceda lo siguiente:

  • Tu fuente de datos es un depósito de Amazon S3, una ubicación HTTP/HTTPS o un depósito de Cloud Storage.
  • El tamaño de los datos es menor que 10 TB.

El servicio de transferencia de almacenamiento tiene opciones que facilitan las transferencias de datos y la sincronización entre las fuentes de datos y los receptores de datos. Por ejemplo, puedes hacer lo siguiente:

  • Programar operaciones de transferencia únicas o, también, operaciones de transferencia recurrentes
  • Borrar objetos existentes en el depósito de destino si no tienen un objeto correspondiente en la fuente
  • Borrar los objetos de la fuente después de transferirlos
  • Programar una sincronización periódica desde la fuente de datos hasta el receptor de datos con filtros avanzados según las fechas de creación de archivos, los filtros de nombres de archivos y el momento del día en el que prefieres importar los datos

Para obtener más información, consulta esta documentación sobre el servicio de transferencia de almacenamiento.

Crea la tabla de destino

El paso siguiente es crear la tabla de destino en Cloud Bigtable.

Primero, usas la herramienta de línea de comandos de gcloud para instalar la herramienta de cliente cbt de Cloud Bigtable.

gcloud components update
gcloud components install cbt

Luego, creas una tabla en Cloud Bigtable con las familias de columnas adecuadas de tu esfuerzo de descubrimiento previo.

Con las divisiones existentes, realiza una división previa de la tabla de destino a medida que la creas. Esto mejorará el rendimiento de la carga masiva.

Por ejemplo, si notas que las divisiones existentes son las siguientes:

'15861', '29374', '38173', '180922', '203294', '335846', '641111', '746477', '807307', '871053', '931689', '1729462', '1952670', '4356485', '4943705', '5968738', '6917370', '8993145', '10624362', '11309714', '12056747', '12772074', '14370672', '16583264', '18835454', '21194008', '22021148', '23702800', '25532516', '55555555'

Luego configura un proyecto predeterminado y una instancia de Cloud Bigtable para la herramienta cbt de tu Cuenta de usuario de la siguiente manera:

$ cat > ${HOME}/.cbtrc << EOF
project = [YOUR-GCP-PROJECT]
instance = [BIGTABLE-INSTANCE-NAME]
EOF

Crea las siguientes divisiones en la tabla de destino:

cbt -instance my-instance createtable my-new-table \
splits=15861,29374,38173,180922,203294,335846,641111,746477,807307,871053,931689,\
1729462,1952670,4356485,4943705,5968738,6917370,8993145,10624362,11309714,\
12056747,12772074,14370672,16583264,18835454,21194008,22021148,23702800,\
5532516,55555555

Crea familias de columnas en la tabla de destino para que coincidan con las que encontraste antes. Por ejemplo, si notaste que hay dos familias de columnas, cf1 y cf2, crea la familia de columnas cf1 en Cloud Bigtable de la siguiente manera:

cbt createfamily my-new-table cf1

Crea la familia de columnas cf2 de la siguiente manera:

cbt createfamily my-new-table cf2

Después de crear las familias de columnas, es importante actualizar la política de recolección de elementos no utilizados de cada familia de columnas, incluida la antigüedad máxima y la cantidad máxima de versiones para los valores de esa familia de columnas. Debes hacer esto incluso si usaste la configuración predeterminada de HBase para tu tabla de HBase, porque las herramientas nativas de Cloud Bigtable usan una configuración predeterminada diferente a la de HBase.

cbt setgcpolicy [TABLE] [FAMILY] ( maxage=[D]| maxversions=[N] )

Importa los datos de HBase a Cloud Bigtable con Cloud Dataflow

Hay dos formas de importar datos a Cloud Bigtable. Consulta Importación de archivos de secuencia en los documentos de Cloud Bigtable para obtener más detalles.

Recuerda las siguientes sugerencias:

  • Para mejorar el rendimiento de la carga de datos, asegúrate de configurar maxNumWorkers. Este valor ayuda a garantizar que el trabajo de importación tenga suficiente poder de procesamiento para completarse en un tiempo razonable, pero no tanto que sobrecargue el clúster de Cloud Bigtable.

  • Durante la importación, debes supervisar el uso de la CPU del clúster de Cloud Bigtable. La sección sobre el uso del CPU del documento de supervisión de Cloud Bigtable proporciona más información acerca de este tema. Si el uso de CPU en el clúster de Cloud Bigtable es demasiado alto, tal vez debas agregar nodos adicionales. El clúster puede tardar hasta 20 minutos en proporcionar el beneficio de rendimiento de nodos adicionales.

Para obtener más información sobre la supervisión de la instancia de Cloud Bigtable, consulta Supervisión de una instancia de Cloud Bigtable.

Verifica los datos importados dentro de Cloud Bigtable

Para validar los datos importados, puedes usar algunas verificaciones diferentes:

  • Verifica la coincidencia del recuento de filas. El trabajo de Cloud Dataflow informará el recuento total de filas. Este valor debe coincidir con el recuento de filas de la tabla de origen de HBase.
  • Verifica rápido con las búsquedas de filas específicas. Puedes elegir un conjunto de claves de filas específico de la tabla de origen y buscarlo en la tabla de destino para asegurarte de que coincidan:
cbt lookup [destination-table] [rowkey1]
cbt lookup [destination-table] [rowkey2]

Pasos siguientes

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

Cómo migrar Hadoop a GCP