Migra datos de HDFS local a Google Cloud

En esta guía, se describe el proceso de transferencia de datos del sistema de archivos distribuido de Hadoop local (HDFS) a Google Cloud.

Esta es la segunda de cuatro guías en las que se describe cómo trasladar datos desde Hadoop local:

Planifica el traslado de los datos

En las siguientes secciones, se describen prácticas recomendadas para planificar la migración de datos de HDFS local a Google Cloud. Planifica la migración de manera incremental para que tengas tiempo de migrar trabajos, experimentar y probar después de mover los cuerpos de datos.

Decide cómo trasladar los datos

Existen dos modelos de migración diferentes que deberías tener en cuenta para transferir datos de HDFS a la nube: envío y extracción. Ambos modelos usan Hadoop DistCp para copiar los datos de los clústeres de HDFS local a Cloud Storage, pero usan enfoques distintos.

El modelo de envío es el más simple: el clúster de origen ejecuta los trabajos distcp en los nodos de datos y envía los archivos directamente a Cloud Storage, como se muestra en el siguiente diagrama:

Migra datos de HDFS con el modelo de envío

El modelo de extracción es más complejo, pero tiene algunas ventajas. Un clúster efímero de Dataproc ejecuta los trabajos distcp en los nodos de datos, extrae archivos del clúster de origen y los copia en Cloud Storage, como se muestra en el siguiente diagrama:

Migra datos de HDFS con el modelo de extracción

El modelo de envío es el más simple porque el clúster de origen puede enviar los datos directamente a Cloud Storage y no necesitas crear recursos de procesamiento adicionales para realizar la copia. Sin embargo, si pretendes seguir usando el clúster de origen durante la migración para otros trabajos de procesamiento de datos regulares, debes asegurarte de que se cuente con los recursos suficientes, como CPU, RAM y ancho de banda de red, en el clúster de origen, a fin de realizar los trabajos de copia.

Si el clúster de origen ya se ejecuta en la capacidad de procesamiento y no puedes aumentar sus recursos para realizar la copia, deberías considerar la opción de usar el modelo de extracción.

Si bien es más complejo que el modelo de envío, el modelo de extracción tiene las siguientes ventajas:

  • Se minimiza el impacto en los recursos de CPU y RAM del clúster de origen, ya que los nodos de origen se usan solo para entregar bloques fuera del clúster. También puedes ajustar las especificaciones de los recursos del clúster de extracción en Google Cloud para manejar los trabajos de copia y borrar el clúster cuando se complete la migración.
  • Se reduce el tráfico de la red del clúster de origen, que permite un ancho de banda de salida mayor y transferencias más rápidas.
  • No es necesario instalar el conector de Cloud Storage en el clúster de origen, ya que el clúster efímero de Dataproc, que tiene el conector instalado, se encarga de transferir los datos a Cloud Storage.

Para comprender las implicaciones del uso de la red en ambos modelos, considera cómo Hadoop maneja la replicación de datos en HDFS. Hadoop divide los archivos en varios bloques; el tamaño del bloque suele ser de 128 o 256 megabytes. Hadoop replica esos bloques en varios nodos de datos y bastidores para evitar la pérdida de datos en caso de que se produzca una falla en el nodo o el bastidor. La configuración estándar consiste en almacenar 3 réplicas de cada bloque.

Hadoop también emplea el “conocimiento de los bastidores”, que garantiza que haya 2 copias de cada bloque en diferentes nodos de datos en el mismo bastidor, para que la latencia sea menor, y una tercera copia en otro bastidor a fin de obtener mayor redundancia y disponibilidad. En el siguiente diagrama, se resume esta lógica de replicación:

Replicación de bloques de HDFS con conocimiento de bastidores

Cuando copias un archivo mediante el modelo de envío, es decir, cuando la tarea de asignación distcp se ejecuta en un nodo de datos del clúster de origen, primero se recopilan todos los bloques del archivo de los nodos de datos. Luego, se extraen los bloques del archivo del clúster de origen y se envían a Cloud Storage. El tráfico en la red puede ocupar hasta el doble del tamaño total del archivo, como se ilustra en el siguiente diagrama:

Uso de la red con el modelo de envío

Cuando copias un archivo mediante el modelo de extracción (es decir, cuando la tarea distcp se ejecuta en un nodo de datos del clúster de extracción en Google Cloud), cada bloque se desplaza por la red solo una vez y, para hacerlo, sale directamente del clúster de origen. El tráfico de red total está limitado por el tamaño total del archivo, como se ilustra en el siguiente diagrama:

Uso de la red con el modelo de extracción

Cuando usas el modelo de extracción, debes supervisar la cantidad de tareas de asignación distcp y el ancho de banda usados para evitar sobrecargar el clúster de origen con demasiadas conexiones paralelas.

Decide a qué ubicación mover los datos

El resultado final de la migración de Hadoop puede ser una solución nativa de la nube o una solución híbrida. La diferencia está en si el sistema retendrá componentes locales. En una solución nativa de la nube, albergas los datos y ejecutas los trabajos en la nube. En una solución híbrida, algunos de los datos se conservan en el entorno local. Quizá también quieras ejecutar trabajos con esos datos en el entorno local, o ejecutar trabajos en la nube que trabaja con datos locales.

La solución nativa de la nube es la más fácil de mantener, pero quizás tengas requisitos técnicos o empresariales que impliquen mantener algunos datos o procesamientos en el entorno local. Todas las soluciones híbridas dependen en gran medida del caso, incluso sus propias mezclas de tecnologías y servicios para cumplir con las necesidades de la carga de trabajo.

Mueve datos a otros productos distintos a Cloud Storage

Mueve la mayoría de los datos a Cloud Storage. Sin embargo, en los siguientes casos, podrías considerar trasladar los datos a otro producto de Google Cloud:

  • Si migras datos de Apache HBase, se recomienda que los muevas a Cloud Bigtable, que proporciona características similares.

  • Si migras datos de Apache Impala, se recomienda que los muevas a BigQuery, que proporciona características similares.

Es posible que tengas datos en HBase o Impala que puedes usar sin almacenarlos en Bigtable o BigQuery. Si el trabajo no requiere las características de Bigtable o BigQuery, almacena los datos en Cloud Storage.

Ten en cuenta los permisos para planificar la ubicación de los datos

Google Cloud no usa los mismos permisos detallados para los archivos que puedes obtener con HDFS local. El enfoque menos complicado para los permisos de archivo consiste en configurarlos a nivel de cada depósito de Cloud Storage. Si estableciste permisos diferentes para distintos grupos de datos de HDFS, se recomienda que crees depósitos distintos en Cloud Storage con permisos diferentes. Luego, pon los datos de HDFS en el depósito que tenga los permisos correspondientes para esos datos.

Si mueves archivos a una estructura de Cloud Storage que es diferente en HDFS, recuerda realizar un seguimiento de todos los cambios. Cuando muevas los trabajos a Dataproc, deberás proporcionar las rutas correctas a los datos en sus ubicaciones nuevas.

Planifica un traslado progresivo

Planifica trasladar los datos en varias etapas. Programa tiempo suficiente para mover a la nube los trabajos correspondientes entre traslados de datos. Comienza la migración con el traslado de datos de prioridad baja, como copias de seguridad y archivos.

Divide los datos

Si planeas mover los datos de forma progresiva, debes dividirlos en varias partes. En las siguientes secciones, se describen las estrategias más comunes para dividir conjuntos de datos.

Divide los datos por marca de tiempo

Un enfoque común para dividir datos de un traslado progresivo consiste en almacenar los datos antiguos en la nube y mantener los nuevos en HDFS en el sistema local. Esto te permite probar los trabajos nuevos y migrados en datos más antiguos y menos críticos. Dividir los datos de esta forma te permite iniciar el traslado con cantidades pequeñas de datos.

Consideraciones importantes:

  • ¿Puedes dividir los datos de una forma que no sea por tiempo? Puedes obtener un conjunto de datos más específico si los divides en función de los trabajos que admiten o la organización propietaria y, luego, los divides también por tiempo.
  • ¿Debes usar una fecha o una hora absolutas o relativas? En algunos casos tiene sentido dividir los datos en función de un punto en el tiempo; por ejemplo, archivar todos los datos generados antes de un cambio importante en el sistema. Usar una fecha o una hora absolutas suele ser apropiado si quieres crear trabajos de reabastecimiento para probar el sistema en la nube, a fin de ver si puedes procesar datos antiguos de modo que cumplan con los estándares actuales. En otros casos, puede que quieras trasladar datos a la nube según una marca de tiempo relativa a la fecha actual. Por ejemplo, quizá muevas todos los datos creados hace más de un año o los que no se editaron en los últimos tres meses.
  • ¿Qué valor de fecha o de hora usas para tomar la decisión? Los archivos suelen tener diversos valores de fecha o de hora. A veces la fecha de creación del archivo es la más importante. En otras ocasiones, quizá quieras usar la última hora de edición o alguna otra marca de tiempo de los metadatos del archivo.
  • ¿Todos los datos tienen el mismo formato de marca de tiempo? Hay muchas formas de manejar las marcas de tiempo. Si los datos provienen de más de una fuente, es posible que las marcas de tiempo se almacenen en formatos diferentes. Asegúrate de tener marcas de tiempo coherentes antes de usarlas para dividir los datos.

Divide los datos por trabajos

A veces puedes dividir los datos según los trabajos que los usan. Esto puede ser muy útil si migras trabajos de forma progresiva. Puedes trasladar solo los datos que usan los trabajos que mueves.

Consideraciones importantes:

  • ¿Los trabajos que mueves a la nube son independientes? La división por trabajos es una gran opción para los trabajos de unidades de datos independientes, pero puede volverse difícil de administrar en trabajos que usen datos que estén dispersos en el sistema.
  • ¿Qué posibilidades hay de que los datos tengan el mismo uso en el futuro? Analiza la situación antes de aislar datos que quizás uses de diferentes maneras.
  • ¿La migración de trabajos tiene el alcance apropiado para generar fragmentos de datos administrables?

También puedes usar criterios funcionales más amplios para dividir los datos en lugar de solo grupos de trabajos. Por ejemplo, podrías ejecutar todo el trabajo de ETL en la nube y, luego, ejecutar trabajos de análisis y de informes de forma local.

Divide los datos por propiedad

En algunos casos, puedes dividir los datos por áreas de propiedad. Una ventaja de este enfoque es que la organización de los datos se alinea con la organización de la empresa. Otra ventaja es que te permite aprovechar la administración de acceso basada en funciones de Google Cloud. Por ejemplo, migrar los datos que usa una función empresarial determinada a un depósito de Cloud Storage aislado facilita el establecimiento de permisos.

Consideraciones importantes:

  • ¿Están claros los límites entre propietarios? Por lo general, está claro quién es el propietario de un dato determinado; a veces las personas que más acceden a los datos no son los propietarios.
  • ¿Hay otros criterios de división que puedan combinarse con la propiedad? Quizás obtengas conjuntos de datos muy grandes si empleas la división por propiedad. Puede ser útil acotar la división aún más y volver a dividir los datos por tarea o tiempo.

Sincroniza los datos en una solución híbrida

Uno de los desafíos de usar una solución híbrida es que, a veces, un trabajo necesita acceder a los datos locales y de Google Cloud. Si es necesario acceder a un conjunto de datos en los dos entornos, debes establecer una ubicación de almacenamiento principal para ese conjunto en un entorno y mantener una copia sincronizada en el otro.

Los desafíos de la sincronización de datos son similares, sin importar qué ubicación primaria elijas. Necesitas una forma de identificar cuándo cambiaron los datos y un mecanismo para propagar los cambios a las copias correspondientes. Si hay probabilidad de que ocurran cambios conflictivos, también necesitas desarrollar una estrategia para resolverlos.

Consideraciones importantes:

  • Siempre realiza copias de datos de solo lectura si es posible. La estrategia de sincronización se vuelve más compleja con cada fuente posible de ediciones nuevas.
  • En una solución híbrida, evita mantener más de dos copias de datos. Mantén solo una copia en el entorno local y una en Google Cloud.

Puedes usar tecnologías como Apache Airflow para facilitar la administración de la sincronización de datos.

Mueve los datos

En las siguientes secciones, se describen las consideraciones para transferir los datos a Google Cloud.

Configura el acceso a los datos

Los permisos de archivo no funcionan de la misma manera en Cloud Storage que en HDFS. Antes de mover los datos a Cloud Storage, debes familiarizarte con Cloud Identity and Access Management (Cloud IAM).

La forma más fácil de administrar el control de acceso es ordenar los datos en depósitos de Cloud Storage según los requisitos de acceso y configurar la política de autorización a nivel de depósito. Puedes asignar funciones que otorguen acceso a usuarios individuales o grupos. Otorga acceso por grupos y, luego, asigna usuarios a los grupos según sea necesario. A medida que importas y estructuras los datos en Cloud Storage, debes tomar decisiones relacionadas con el acceso a los datos.

Todos los productos de Google Cloud tienen sus propios permisos y funciones. Asegúrate de comprender las relaciones entre los controles de acceso de Cloud Storage y los de Dataproc. Evalúa las políticas de los productos por separado. No supongas que las funciones y los permisos se asignan directamente entre los productos.

Lee la siguiente documentación a fin de prepararte para tomar decisiones relativas a las políticas del sistema de Hadoop basado en la nube:

Si necesitas asignar permisos más detallados a archivos individuales, Cloud Storage admite las listas de control de acceso (LCA). Sin embargo, Cloud IAM es la opción que más se recomienda. Solo usa las LCA si los permisos son muy complejos.

Usa DistCp para copiar los datos a Cloud Storage

Debido a que Cloud Storage es un sistema de archivos compatible con Hadoop, puedes usar Hadoop DistCp para mover los datos de HDFS local a Cloud Storage. Puedes mover los datos de distintas formas mediante DistCp. Recomendamos esta forma:

  1. Usa Cloud VPN para establecer un túnel de red privada virtual entre el proyecto de Google Cloud y la red local.

  2. Crea un clúster de Dataproc para usar en la transferencia de datos.

  3. Usa la herramienta de línea de comandos de gcloud para conectarte con la instancia principal del clúster. Por ejemplo:

    gcloud compute ssh [CLUSTER_NAME]-m
        

    En el ejemplo anterior, CLUSTER_NAME es el nombre del clúster de Dataproc que creaste para el trabajo. El sufijo -m identifica la instancia principal.

  4. En la instancia principal del clúster, ejecuta los comandos DistCp para mover los datos.

Los comandos DistCp reales que necesitas para mover los datos son similares a los siguientes:

hadoop distcp hdfs://nn1:8020/20170202/ gs://bucket/20170202/
    

En este ejemplo, nn18020 son el nombre del nodo y el puerto que corresponden al almacenamiento de los datos de origen, y bucket es el nombre del depósito de Cloud Storage en el que copias el archivo.

Valida transferencias de datos

Cuando copias o mueves datos entre sistemas de almacenamiento distintos, como varios clústeres de HDFS o entre HDFS y Cloud Storage, es recomendable realizar algún tipo de validación para garantizar la integridad de los datos. Esta validación es fundamental para asegurarse de que los datos no se alteraron durante la transferencia. Si deseas obtener más detalles, consulta la guía Valida transferencias de datos.

Aumenta el porcentaje de solicitudes

Cloud Storage mantiene un índice de claves de objetos para cada depósito con el fin de proporcionar una lista coherente de objetos. Este índice se almacena en orden lexicográfico y se actualiza cuando se escriben o borran objetos de un depósito. Agregar y borrar objetos cuyas claves se encuentran en un rango pequeño del índice aumenta las posibilidades de contención.

Cloud Storage detecta esa contención y redistribuye de forma automática la carga del rango del índice afectado en varios servidores. Si escribes objetos bajo un prefijo nuevo y prevés que alcanzarás un porcentaje mayor a 1,000 solicitudes de escritura por segundo, debes aumentar el porcentaje de solicitudes de manera gradual, como se describe en la documentación de Cloud Storage. No hacerlo puede causar mayor latencia y tasas de errores por un tiempo.

Mejora la velocidad de la migración de los datos

La forma más sencilla de transferir datos de los clústeres locales a Google Cloud es mediante un túnel VPN a través de la Internet pública. Si un solo túnel VPN no proporciona la capacidad de procesamiento necesaria, se pueden crear varios túneles VPN, y Google Cloud distribuirá el tráfico de forma automática entre los túneles para proporcionar un ancho de banda adicional.

Algunas veces, incluso varios túneles VPN no proporcionan la estabilidad de conexión o el ancho de banda que exige la migración. Considera los siguientes enfoques para mejorar la capacidad de procesamiento:

  • Usa el intercambio de tráfico directo entre la red y los puntos de presencia periféricos (PoP) de Google. Con esta opción, se reduce la cantidad de saltos entre la red y Google Cloud.

  • Usa un proveedor de servicios de Cloud Interconnect para establecer una conexión directa con la red de Google. Los detalles del servicio varían según los diferentes socios. La mayoría ofrece un ANS para la disponibilidad y el rendimiento de la red. Comunícate directamente con un proveedor de servicios para obtener más información.

Trabaja con socios de Google Cloud

Google Cloud trabaja con una variedad de socios que pueden ayudarte a migrar los datos. A fin de obtener más información sobre los servicios disponibles que pueden ayudarte con la migración de datos, consulta los socios que trabajan con Cloud Storage. Para obtener detalles, comunícate con los proveedores directamente, ya que los servicios y términos disponibles varían según el proveedor.

Próximos pasos