Logotipo de Zephyrnet

Manejar datos de referencia que cambian rápidamente en un trabajo de ETL de transmisión de AWS Glue

Fecha:

Transmitir trabajos de ETL in Pegamento AWS puede consumir datos de fuentes de transmisión como Kinesis amazónica y Apache Kafka, limpie y transforme esos flujos de datos sobre la marcha, así como cargue continuamente los resultados en Servicio de almacenamiento simple de Amazon (Amazon S3), lagos de datos, almacenes de datos u otros almacenes de datos.

La naturaleza siempre activa de los trabajos de transmisión plantea un desafío único cuando se manejan datos de referencia que cambian rápidamente y que se utilizan para enriquecer los flujos de datos dentro del trabajo de ETL de transmisión de AWS Glue. AWS Glue procesa datos en tiempo real de Secuencias de datos de Amazon Kinesis utilizando micro lotes. los foreachbatch El método utilizado para procesar microlotes maneja un flujo de datos.

Esta publicación propone una solución para enriquecer los datos de transmisión con datos de referencia que cambian con frecuencia en un trabajo de ETL de transmisión de AWS Glue.

Puede enriquecer los flujos de datos cambiando los datos de referencia de las siguientes maneras:

  • Lea el conjunto de datos de referencia con cada microlote, lo que puede provocar lecturas redundantes y un aumento de las solicitudes de lectura. Este enfoque es costoso, ineficiente y no se cubre en esta publicación.
  • Diseñe un método para decirle al trabajo de transmisión de AWS Glue que los datos de referencia han cambiado y actualícelo solo cuando sea necesario. Este enfoque es rentable y altamente disponible. Recomendamos utilizar este enfoque.

Resumen de la solución

Esta publicación usa DynamoDB Streams para capturar cambios en los datos de referencia, como se ilustra en el siguiente diagrama de arquitectura. Para obtener más información acerca de las secuencias de DynamoDB, consulte Casos de uso y patrones de diseño de secuencias de DynamoDB.

El flujo de trabajo contiene los siguientes pasos:

  1. Un usuario o aplicación actualiza o crea un nuevo elemento en la tabla de DynamoDB.
  2. DynamoDB Streams se utiliza para identificar cambios en los datos de referencia.
  3. Se invoca una función Lambda cada vez que se produce un cambio en los datos de referencia.
  4. La función Lambda captura el evento que contiene el registro modificado, crea un "archivo de cambios" y lo coloca en un depósito de Amazon S3.
  5. El trabajo de AWS Glue está diseñado para monitorear la transmisión en busca de este valor en cada microlote. En el momento en que ve el indicador de cambio, AWS Glue inicia una actualización de los datos de DynamoDB antes de procesar más registros en la transmisión.

Esta publicación va acompañada de un Formación en la nube de AWS plantilla que crea recursos como se describe en la arquitectura de la solución:

  • Una tabla de DynamoDB llamada ProductPriority con algunos elementos cargados
  • Un depósito de S3 llamado demo-bucket-<AWS AccountID>
  • Dos funciones Lambda:
    • demo-glue-script-creator-lambda
    • demo-reference-data-change-handler
  • Un flujo de datos de Kinesis denominado SourceKinesisStream
  • Una base de datos de AWS Glue Data Catalog llamada my-database
  • Dos tablas de Data Catalog
  • Un trabajo de AWS Glue llamado demo-glue-job-<AWS AccountID>. El código para el trabajo de AWS Glue se puede encontrar en este enlace.
  • Dos Gestión de identidades y accesos de AWS (IAM) funciones:
    • Un rol para que las funciones de Lambda accedan a Kinesis, Amazon S3 y DynamoDB Streams
    • Un rol para el trabajo de AWS Glue para acceder a Kinesis, Amazon S3 y DynamoDB
  • An Generador de datos de Amazon Kinesis (KDG) con un usuario creado a través de Cognito Amazonas para generar un flujo de datos de muestra

Requisitos previos

Para este tutorial, debe tener los siguientes requisitos previos:

  • Una cuenta de AWS
  • El usuario de IAM debe tener permisos para crear los roles requeridos
  • Permiso para crear una pila de CloudFormation y los servicios que detallamos

Cree recursos con AWS CloudFormation

Para implementar la solución, complete los siguientes pasos:

  1. Elige Pila de lanzamiento:
  2. Configurar un grupo de usuarios de Amazon Cognito y pruebe si puede acceder a la URL de KDG especificada en la pestaña de salida de la pila. Además, valide si puede iniciar sesión en KDG con las credenciales proporcionadas al crear la pila.

Ahora debería tener los recursos necesarios disponibles en su cuenta de AWS.

  1. Verifique esta lista con los recursos en la sección de salida de la pila de CloudFormation.

Data de muestra

Los datos de referencia de muestra ya se han cargado en el almacén de datos de referencia. La siguiente captura de pantalla muestra un ejemplo.

La priority el valor puede cambiar con frecuencia según la hora del día, el día de la semana u otros factores que impulsan la oferta y la demanda.

El objetivo es acomodar estos cambios en los datos de referencia sin problemas en la canalización.

Genere un flujo aleatorio de eventos en Kinesis

A continuación, simulamos un flujo de datos de muestra en Kinesis. Para obtener instrucciones detalladas, consulte Pruebe su solución de transmisión de datos con el nuevo generador de datos de Amazon Kinesis. Para esta publicación, definimos la estructura de los datos de pedidos simulados utilizando una plantilla parametrizada.

  1. En la consola de KDG, elija la región en la que se encuentra la secuencia de origen de Kinesis.
  2. Elija su flujo de entrega.
  3. Introduzca la siguiente plantilla en el campo Plantilla de registro:
    { "dish": "{{random.arrayElement(["pizza","burger","salad","donut","ice-cream"])}}"
    ,"cost": {{random.number({"min":10,"max":150})}}
    ,"customer_id":{{random.number({"min":1,"max":10000})}}
    }

  4. Elige Plantilla de prueba, A continuación, elija Enviar datos.

KDG debería comenzar a enviar un flujo de pedidos generados aleatoriamente al flujo de datos de Kinesis.

Ejecute el trabajo de transmisión de AWS Glue

La pila de CloudFormation creó un trabajo de AWS Glue que lee el flujo de datos de Kinesis a través de una tabla de catálogo de datos, se une a los datos de referencia en DynamoDB y escribe el resultado en un depósito de S3. Para ejecutar el trabajo, complete los siguientes pasos:

  1. En la consola de AWS Glue, debajo de ETL en el panel de navegación, elija Empleo.
  2. Seleccione el trabajo demo-glue-job-<AWS AccountID>.
  3. En Acciones menú, seleccione Ejecutar trabajo.

Además del enriquecimiento, el trabajo incluye una verificación adicional que monitorea un prefijo de Amazon S3 para un archivo de "Cambio de indicador". Este archivo lo crea la función Lambda, que es invocada por el flujo de DynamoDB cada vez que hay una actualización o un nuevo elemento de referencia.

Investigue los datos de destino en Amazon S3

La siguiente es una captura de pantalla de los datos que se cargan en tiempo real en el item=burger dividir. La prioridad se fijó en media en los datos de referencia, y las órdenes van a la partición correspondiente.

Actualizar los datos de referencia

Ahora actualizamos la prioridad para burgers a high en la tabla de DynamoDB a través de la consola mientras los pedidos se transmiten a la canalización.

Use el siguiente comando para realizar la actualización a través de Amazon CloudShell. Cambie la Región al valor apropiado.

aws dynamodb update-item --table-name "ProductPriority" --key '{"item":{"S":"burger"}, "price":{"N":"100"}}' --update-expression "SET priority = :s" --expression-attribute-values '{":s": {"S": "high"}}' --return-values ALL_NEW --region us-east-1

Verifique que los datos se actualizaron.

Navegue a la carpeta S3 de destino para confirmar el contenido. El trabajo de AWS Glue debería haber comenzado a enviar los pedidos de hamburguesas al high dividir.

La transmisión de DynamoDB invoca la función Lambda y coloca un archivo de "Change Flag" en un depósito de Amazon S3. El trabajo de AWS Glue actualiza los datos de referencia y elimina el archivo para evitar actualizaciones redundantes.

Uso de este patrón para datos de referencia en Amazon S3

Si los datos de referencia se almacenan en un depósito S3, cree un Notificación de eventos de Amazon S3 que identifica cambios en el prefijo donde se almacenan los datos de referencia. La notificación de eventos invoca una función de Lambda que inserta el indicador de cambio en el flujo de datos.

Limpiar

Para evitar incurrir en cargos futuros, elimine los recursos. Puedes hacer esto por eliminando la pila de CloudFormation.

Conclusión

En esta publicación, discutimos enfoques para manejar datos de referencia que cambian rápidamente almacenados en DynamoDB o Amazon S3. Demostramos un caso de uso simple que implementa este patrón.

Tenga en cuenta que DynamoDB Streams escribe registros de transmisión casi en tiempo real. Cuando diseñe su solución, tenga en cuenta un pequeño retraso entre la actualización real en DynamoDB y la escritura en el flujo de DynamoDB.


Acerca de los autores

Jerónimo Rajan es consultor principal de análisis de datos en AWS. Ayuda a los clientes a diseñar y crear soluciones de análisis escalables y migrar canalizaciones de datos y almacenes de datos a la nube. ¡En un universo alternativo, es un campeón mundial de ajedrez!

Ghosal de Dipankar es arquitecto principal en Amazon Web Services y tiene su sede en Minneapolis, MN. Tiene un enfoque en análisis y disfruta ayudar a los clientes a resolver sus casos de uso únicos. Cuando no está trabajando, le encanta ir de excursión con su esposa y su hija.

punto_img

Información más reciente

punto_img