Trabajos ETL de streaming en AWS Glue - AWS Glue

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Trabajos ETL de streaming en AWS Glue

Puede crear trabajos de extracción, transformación y carga (ETL) de streaming que se ejecuten continuamente, consuman datos de orígenes de streaming como Amazon Kinesis Data Streams, Apache Kafka y Amazon Managed Streaming for Apache Kafka (Amazon MSK). Los trabajos limpian y transforman los datos y, a continuación, cargan los resultados en los lagos de datos de Amazon S3 o en los almacenes de datos JDBC.

Además, puede generar datos para los flujos de Amazon Kinesis Data Streams. Esta función solo está disponible al escribir AWS Glue guiones. Para obtener más información, consulte Conexión de Kinesis.

De forma predeterminada, AWS Glue procesa y escribe datos en periodos de 100 segundos. Esto permite que los datos se procesen de forma eficiente y permite que las agregaciones se realicen en los datos que lleguen más tarde de lo previsto. Puede modificar este tamaño de ventana para aumentar la puntualidad o la precisión de la agregación. Los trabajos de streaming de AWS Glue utilizan puntos de control en lugar de marcadores de trabajo para rastrear los datos leídos.

nota

AWS Glue factura por hora para trabajos de ETL de streaming mientras se están ejecutando.

En este vídeo se analizan los retos de coste de la transmisión por ETL y las funciones que permiten ahorrar costes. AWS Glue

La creación de un trabajo ETL de streaming consta de los siguientes pasos:

  1. Para un origen de streaming de Apache Kafka, cree una conexión de AWS Glue al origen de Kafka o al clúster de Amazon MSK.

  2. Cree manualmente una tabla del Catálogo de datos para el origen de streaming.

  3. Cree un trabajo ETL para el origen de datos de streaming. Defina propiedades de trabajo específicas de streaming y proporcione su propio script o también puede modificar el script generado.

Para obtener más información, consulte ETL de streaming en AWS Glue.

Al crear un trabajo de ETL de streaming para Amazon Kinesis Data Streams, no es necesario crear una conexión de AWS Glue. Sin embargo, si hay una conexión asociada al trabajo de ETL de streaming de AWS Glue que tenga Kinesis Data Streams como origen, se requiere un punto de enlace de la nube privada virtual (VPC) para Kinesis. Para obtener más información, consulte Creación de un punto de conexión de interfaz en la Guía del usuario de Amazon VPC. Al especificar un flujo de Amazon Kinesis Data Streams en otra cuenta, debe configurar los roles y las políticas para permitir el acceso entre cuentas. Para obtener más información, consulte Ejemplo: leer desde un flujo de Kinesis en una cuenta diferente.

Los trabajos de ETL de streaming en AWS Glue pueden detectar automáticamente datos comprimidos, descomprimir de forma transparente los datos de streaming, realizar las transformaciones habituales en el origen de entrada y cargarlos en el almacén de salida.

AWS Glue admite la descompresión automática para los siguientes tipos de compresión dado el formato de entrada:

Tipo de compresión Archivo Avro Datos de Avro JSON CSV Grok
BZIP2
GZIP No
SNAPPY Sí (Snappy sin formato) Sí (con encuadre de Snappy) Sí (con encuadre de Snappy) Sí (con encuadre de Snappy) Sí (con encuadre de Snappy)
XZ
ZSTD No No No No
DEFLATE

Creación de una conexión de AWS Glue para un flujo de datos Apache Kafka

Para leer en una transmisión de Apache Kafka, debe crear una conexión de AWS Glue.

Para crear una conexión de AWS Glue para un origen de Kafka (consola)
  1. Abra la AWS Glue consola en https://console.aws.amazon.com/glue/.

  2. En el panel de navegación, en Data catalog (Catálogo de datos), elija Connections (Conexiones).

  3. Elija Agregar conexión y, en la página Configurar las propiedades de la conexión escriba un nombre de conexión.

    nota

    Para obtener más información acerca de cómo especificar propiedades de conexión, consulte Propiedades de conexión de AWS Glue.

  4. En Tipo de conexión, elija Kafka.

  5. Para Kafka bootstrap servers URLs (URL de servidores de arranque Kafka), ingrese el host y el número de puerto de los agentes de arranque para su clúster de Amazon MSK o Apache Kafka. Utilice sólo los puntos de enlace de Transport Layer Security (TLS) para establecer la conexión inicial con el clúster de Kafka. No se admiten puntos de enlace de texto no cifrado.

    A continuación se ofrece una lista de pares de nombre de host y número de puerto para un clúster de Amazon MSK a modo de ejemplo.

    myserver1.kafka.us-east-1.amazonaws.com:9094,myserver2.kafka.us-east-1.amazonaws.com:9094, myserver3.kafka.us-east-1.amazonaws.com:9094

    Para obtener más información sobre cómo obtener la información del agente de arranque, consulte Obtener los agentes de arranque para un clúster de Amazon MSK en la Guía para desarrolladores de Amazon Managed Streaming for Apache Kafka.

  6. Si desea una conexión segura al origen de datos de Kafka, seleccione Require SSL connection (Solicitar conexión SSL), y para Kafka private CA certificate location (Ubicación del certificado de CA privado de Kafka), ingrese una ruta válida de Amazon S3 a un certificado SSL personalizado.

    Para una conexión SSL a Kafka autoadministrado, el certificado personalizado es obligatorio. Es opcional para Amazon MSK.

    Para obtener más información sobre cómo especificar un certificado personalizado para Kafka, consulte Propiedades de las conexiones SSL de AWS Glue.

  7. Utilice AWS Glue Studio o la AWS CLI para especificar un método de autenticación de cliente de Kafka. Para acceder, AWS Glue Studio seleccione una opción AWS Gluedel menú ETL en el panel de navegación izquierdo.

    Para obtener más información acerca de los métodos de autenticación de cliente Kafka, consulte Propiedades de conexión de AWS Glue Kafka para autenticación de clientes .

  8. Si lo desea, escriba una descripción y, a continuación, elija Next (Siguiente).

  9. Para un clúster de Amazon MSK, especifique la nube virtual privada (VPC), su subred y el grupo de seguridad. La información de la VPC es opcional para Kafka autoadministrado.

  10. Elija Next (Siguiente) para revisar todas las propiedades de conexión y, a continuación, elija Finish (Finalizar).

Para obtener más información acerca de las conexiones de AWS Glue, consulte Conexión a datos.

Propiedades de conexión de AWS Glue Kafka para autenticación de clientes

Autenticación SASL/GSSAPI (Kerberos)

La elección de este método de autenticación le permitirá especificar propiedades de Kerberos.

Keytab de Kerberos

Seleccione la ubicación del archivo keytab. Una keytab almacena claves a largo plazo para uno o varias entidades principales. Para obtener más información, consulte MIT Kerberos Documentation: Keytab (Documentación de MIT Kerberos: Keytab).

Archivo Kerberos krb5.conf

Seleccione el archivo krb5.conf. Contiene el dominio predeterminado (una red lógica, similar a un dominio, que define un grupo de sistemas bajo el mismo KDC) y la ubicación del servidor KDC. Para obtener más información, consulte MIT Kerberos Documentation: krb5.conf (Documentación de MIT Kerberos: krb5.conf).

Nombre principal y nombre de servicio de Kerberos

Ingrese el nombre principal y el de servicio de Kerberos. Para obtener más información, consulte la documentación de Kerberos de MIT: principal de Kerberos.

Autenticación SASL/SCRAM-SHA-512

La elección de este método de autenticación le permitirá especificar credenciales de autenticación.

AWS Secrets Manager

Busque el token en el cuadro de búsqueda mediante el nombre o ARN.

Nombre de usuario y contraseña del proveedor directamente

Busque el token en el cuadro de búsqueda mediante el nombre o ARN.

Autenticación SSL del cliente

La elección de este método de autenticación le permite seleccionar la ubicación del almacén de claves del cliente Kafka navegando por Amazon S3. Opcionalmente, puede ingresar la contraseña del almacén de claves del cliente Kafka y la contraseña de clave de cliente Kafka.

Autenticación de IAM

Este método de autenticación no requiere especificaciones adicionales y solo se aplica cuando la fuente de streaming es Kafka para MSK.

Autenticación de SASL/PLAIN

Al elegir este método de autenticación, puede especificar las credenciales de autenticación.

Creación de una tabla del Catálogo de datos para un origen de streaming

Es posible crear de forma manual una tabla del Catálogo de datos que especifique las propiedades del flujo de datos de origen, incluido el esquema de datos, para un origen de streaming. Esta tabla se utiliza como origen de datos para el trabajo ETL de streaming.

Si no conoce el esquema de los datos en el flujo de datos de origen, puede crear la tabla sin un esquema. A continuación, cuando cree el trabajo de ETL de streaming, puede habilitar la función detección de esquema de AWS Glue. AWS Glue determinará el esquema a partir de los datos de streaming.

Utilice la AWS Glueconsola, el AWS Command Line Interface (AWS CLI) o la AWS Glue API para crear la tabla. Para obtener información sobre cómo crear una tabla manualmente con la consola de AWS Glue, consulte Creación de tablas.

nota

No puedes usar la AWS Lake Formation consola para crear la tabla; debes usarla. AWS Glue

Tenga en cuenta también la siguiente información para los orígenes de streaming en formato Avro o para los datos de registro a los que puede aplicar patrones Grok.

Origen de datos de Kinesis

Al crear la tabla, configure las siguientes propiedades de ETL de streaming (consola).

Tipo de origen

Kinesis

Para un origen de Kinesis en la misma cuenta:
Región

La AWS región en la que reside el servicio Amazon Kinesis Data Streams. La región y el nombre del flujo de Kinesis se traducen juntos a un ARN de flujo.

Ejemplo: https://kinesis.us-east-1.amazonaws.com

Nombre de flujo de Kinesis

Nombre de la transmisión, tal como se describe en Creación de una transmisión en la Guía para desarrolladores de Amazon Kinesis Data Streams.

Para un origen de Kinesis en otra cuenta, consulte este ejemplo para configurar los roles y políticas que permitan el acceso entre cuentas. Configure estas opciones:
ARN de flujo

El ARN del flujo de datos de Kinesis con el que está registrado el consumidor. Para obtener más información, consulte Nombres de recursos (ARN) y espacios de nombres de AWS servicios de Amazon en. Referencia general de AWS

ARN de rol asumido

El nombre de recurso de Amazon (ARN) del rol que se asignará.

Nombre de la sesión (opcional)

Un identificador para la sesión del rol asumido.

Utilice el nombre de la sesión del rol para identificar de forma única una sesión cuando el mismo rol es asumido por diferentes entidades o por diferentes razones. En escenarios entre cuentas, el nombre de la sesión del rol es visible para la cuenta que es titular del rol. Esta cuenta podrá registrar el rol. El nombre de la sesión del rol también se utiliza en el ARN de la entidad principal del rol asumido. Esto significa que las solicitudes de API multicuenta posteriores que utilicen las credenciales de seguridad temporales expondrán el nombre de la sesión del rol a la cuenta externa en sus registros. AWS CloudTrail

Para configurar las propiedades de ETL de streaming para Amazon Kinesis Data Streams (API de AWS Glue o AWS CLI)
  • Para configurar las propiedades de ETL de streaming para un origen de Kinesis en la misma cuenta, especifique los parámetros streamName y endpointUrl en la estructura StorageDescriptor de la operación de la API CreateTable o el comando de la CLI create_table.

    "StorageDescriptor": { "Parameters": { "typeOfData": "kinesis", "streamName": "sample-stream", "endpointUrl": "https://kinesis.us-east-1.amazonaws.com" } ... }

    O bien, especifique streamARN.

    "StorageDescriptor": { "Parameters": { "typeOfData": "kinesis", "streamARN": "arn:aws:kinesis:us-east-1:123456789:stream/sample-stream" } ... }
  • Para configurar las propiedades de ETL de streaming para un origen de Kinesis en otra cuenta, especifique los parámetros streamARN, awsSTSRoleARN y awsSTSSessionName (opcional) en la estructura StorageDescriptor en la operación de la  API CreateTable o el comando de la CLI create_table.

    "StorageDescriptor": { "Parameters": { "typeOfData": "kinesis", "streamARN": "arn:aws:kinesis:us-east-1:123456789:stream/sample-stream", "awsSTSRoleARN": "arn:aws:iam::123456789:role/sample-assume-role-arn", "awsSTSSessionName": "optional-session" } ... }

Origen de datos de Kafka

Al crear la tabla, configure las siguientes propiedades de ETL de streaming (consola).

Tipo de origen

Kafka

Para un origen de Kafka:
Nombre del tema

Nombre del tema como se especifica en Kafka.

Connection

Una conexión de AWS Glue que hace referencia a un origen de Kafka, como se describe en Creación de una conexión de AWS Glue para un flujo de datos Apache Kafka.

Origen de tablas de AWS Glue Schema Registry

A fin de utilizar AWS Glue Schema Registry para trabajos de streaming, siga las instrucciones de Caso de uso: AWS Glue Data Catalog para crear o actualizar una tabla de Schema Registry.

Actualmente, el streaming de AWS Glue solo soporta el formato Avro de Glue Schema Registry con inferencia de esquema establecida en false.

Notas y restricciones para orígenes de streaming de Avro

Las siguientes notas y restricciones corresponden a los orígenes de streaming en formato Avro:

  • Cuando se activa la detección de esquemas, el esquema de Avro debe incluirse en la carga. Cuando se desactiva, la carga debe contener solo datos.

  • Algunos tipos de datos de Avro no se admiten en marcos dinámicos. No se pueden especificar estos tipos de datos al definir el esquema con la página Define a schema (Definir un esquema) en el asistente de creación de tabla en la consola de AWS Glue. Durante la detección de esquemas, los tipos no soportados en el esquema Avro se convierten en tipos soportados de la siguiente manera:

    • EnumType => StringType

    • FixedType => BinaryType

    • UnionType => StructType

  • Si define el esquema de tabla mediante la página Define a schema (Definir un esquema) en la consola, el tipo de elemento raíz implícito para el esquema es record. Si desea un tipo de elemento raíz distinto de record, por ejemplo, array or map, no puede especificar el esquema mediante la página Define a schema (Definir un esquema). En su lugar, debe omitir esa página y especificar el esquema como propiedad de tabla o dentro del script de ETL.

    • Para especificar el esquema en las propiedades de la tabla, complete el asistente de creación de tabla, edite los detalles de la tabla y agregue un nuevo par clave-valor en Table properties (Propiedades de la tabla). Utilice la clave avroSchema, e ingrese un objeto JSON de esquema para el valor, tal y como se muestra en la siguiente captura de pantalla.

      En el encabezado Table properties (Propiedades de la tabla), hay dos columnas de campos de texto. El encabezado de la columna de la izquierda es Key (Clave) y el encabezado de la columna de la derecha es Value (Valor). El par clave/valor en la primera fila es clasificación/avro. El par clave/valor de la segunda fila es avroSchema/{"type":"array","items":"string"}.
    • Para especificar el esquema en el script de ETL, modifique la instrucción de asignación datasource0 y agregue la clave avroSchema a la instrucción additional_options, tal y como se muestra en los siguientes ejemplos de Python y Scala.

      Python
      SCHEMA_STRING = ‘{"type":"array","items":"string"}’ datasource0 = glueContext.create_data_frame.from_catalog(database = "database", table_name = "table_name", transformation_ctx = "datasource0", additional_options = {"startingPosition": "TRIM_HORIZON", "inferSchema": "false", "avroSchema": SCHEMA_STRING})
      Scala
      val SCHEMA_STRING = """{"type":"array","items":"string"}""" val datasource0 = glueContext.getCatalogSource(database = "database", tableName = "table_name", redshiftTmpDir = "", transformationContext = "datasource0", additionalOptions = JsonOptions(s"""{"startingPosition": "TRIM_HORIZON", "inferSchema": "false", "avroSchema":"$SCHEMA_STRING"}""")).getDataFrame()

Aplicación de patrones Grok a orígenes de streaming

Puede crear un trabajo de ETL de streaming para un origen de datos de registro y utilizar patrones Grok para convertir los registros en datos estructurados. Luego, el trabajo de ETL procesa los datos como un origen de datos estructurados. Especifique los patrones Grok que se aplicarán al crear la tabla del Catálogo de datos para el origen de streaming.

Para obtener información acerca de los patrones Grok y los valores de la cadena de patrones personalizados, consulte Escritura de clasificadores personalizados de Grok.

Para agregar patrones Grok a la tabla del Catálogo de datos (consola)
  • Utilice el asistente de creación de tablas y cree la tabla con los parámetros especificados en Creación de una tabla del Catálogo de datos para un origen de streaming. Especifique el formato de datos como Grok, complete el campo Grok pattern (Patrón de Grok) y, opcionalmente, agregue patrones personalizados en Custom patterns (Patrones personalizados) (opcional).

    *

    Presione Enter (Intro) después de cada patrón personalizado.

Para agregar patrones grok a la tabla del Catálogo de datos (API de AWS Glue o AWS CLI)
  • Agregue el parámetro GrokPattern y, opcionalmente, el parámetro CustomPatterns a la operación de API CreateTable o al comando de la CLI create_table.

    "Parameters": { ... "grokPattern": "string", "grokCustomPatterns": "string", ... },

    Indique grokCustomPatterns como una cadena y use “\n” como separador entre patrones.

    El siguiente ejemplo muestra cómo especificar estos parámetros.

    "parameters": { ... "grokPattern": "%{USERNAME:username} %{DIGIT:digit:int}", "grokCustomPatterns": "digit \d", ... }

Definición de propiedades de trabajo para un trabajo ETL de streaming

Cuando defina un trabajo de ETL de streaming en la consola de AWS Glue, proporcione las siguientes propiedades específicas de los flujos. Para obtener propiedades de trabajo adicionales, consulte Definición de propiedades de trabajo para trabajos de Spark.

Rol de IAM

Especifique la función AWS Identity and Access Management (IAM) que se utiliza para autorizar los recursos que se utilizan para ejecutar el trabajo, acceder a las fuentes de streaming y acceder a los almacenes de datos de destino.

Para acceder a Amazon Kinesis Data Streams, asocie AmazonKinesisFullAccess AWS la política gestionada al rol o adjunte una política de IAM similar que permita un acceso más detallado. Para obtener información sobre políticas de ejemplo, consulte Control del acceso a los recursos de Amazon Kinesis Data Streams mediante IAM.

Para obtener más información acerca de los permisos para ejecutar trabajos en AWS Glue, consulte Gestión de identidad y acceso para AWS Glue.

Tipo

Elija Spark Streaming.

Versión de AWS Glue

La versión de AWS Glue determina las versiones de Apache Spark y Python o Scala que están disponibles para el trabajo. Elija una selección que especifique la versión de Python o Scala disponible para el trabajo. AWS Glue La versión 2.0 con soporte de Python 3 es la predeterminada para los trabajos de ETL de streaming.

Periodo de mantenimiento

Especifica una ventana en la que se puede reiniciar un trabajo de streaming. Consulte Ventanas de mantenimiento para AWS Glue Streaming.

Job timeout (Tiempo de espera de flujo de trabajo)

Si lo desea, escriba una duración en minutos. El valor predeterminado está en blanco.

  • Los trabajos de streaming deben tener un valor de tiempo de espera inferior a 7 días o 10080 minutos.

  • Si el valor se deja en blanco, el trabajo se reiniciará después de 7 días, si no ha establecido un período de mantenimiento. Si ha configurado un período de mantenimiento, el trabajo se reiniciará durante el período de mantenimiento transcurridos 7 días.

Origen de datos

Elimine la tabla que creó en Creación de una tabla del Catálogo de datos para un origen de streaming.

Destino de datos

Realice una de las siguientes acciones siguientes:

  • Elija Crear tablas en el destino de datos y especifique las siguientes propiedades de destino de datos.

    Almacén de datos

    Seleccione Amazon S3 o JDBC.

    Formato

    Elija cualquier formato. Todos son compatibles para streaming.

  • Elija Use tables in the data catalog and update your data target (Utilizar tablas en el Catálogo de datos y actualizar el destino de los datos) y elija una tabla para un almacén de datos JDBC.

Definición de esquema de salida

Realice una de las siguientes acciones siguientes:

  • Seleccione Automatically detect schema of each record (Detectar automáticamente el esquema de cada registro) para habilitar la detección de esquemas. AWS Glue determina el esquema a partir de los datos de streaming.

  • Seleccione Specify output schema for all records (Especificar esquema de salida para todos los registros) para utilizar la transformación de la función de aplicar mapeo a fin de definir el esquema de salida.

Script

Si lo desea, proporcione su propio script o modifique el script generado para realizar operaciones compatibles con el motor Apache Spark Structured Streaming. Para obtener información sobre las operaciones disponibles, consulte Operaciones en streaming DataFrames /Datasets.

Notas y restricciones de ETL de streaming

Tenga en cuenta las siguientes notas y restricciones:

  • La descompresión automática para los trabajos de ETL de streaming en AWS Glue solo está disponible para los tipos de compresión admitidos. Tenga también en cuenta lo siguiente:

    • Con encuadre de Snappy se refiere al formato de encuadre oficial para Snappy.

    • Deflate es compatible con la versión 3.0 de Glue, no con la versión 2.0.

  • Cuando se utiliza la detección de esquemas, no se pueden realizar combinaciones de datos de streaming.

  • Los trabajos ETL de streaming de AWS Glue no admiten el tipo de datos de la Unión para el Registro de esquemas de AWS Glue con formato Avro.

  • Su script de ETL puede usar las transformaciones incorporadas de AWS Glue y las transformaciones nativas de Apache Spark Structured Streaming. Para obtener más información, consulte Operaciones de transmisión de DataFrames /Datasets en el sitio web de Apache Spark o. AWS Glue PySpark transforma la referencia

  • Los trabajos de ETL de streaming de AWS Glue utilizan puntos de comprobación para realizar un seguimiento de los datos que se han leído. Por lo tanto, un trabajo detenido y reiniciado comienza donde lo dejó en la transmisión. Si desea volver a procesar los datos, puede eliminar la carpeta de puntos de control a la que se hace referencia en el script.

  • No se admiten los marcadores de trabajo.

  • Para la función de distribución mejorada de Kinesis Data Streams en un trabajo, consulte Uso de una distribución mejorada en los trabajos de streaming de Kinesis.

  • Si utiliza una tabla del Catálogo de datos creada a partir de AWS Glue Schema Registry, cuando se encuentre disponible una versión de esquema nueva, para reflejar el esquema nuevo, debe realizar lo siguiente:

    1. Detenga los trabajos asociados a la tabla.

    2. Actualice el esquema de la tabla del Catálogo de datos.

    3. Reinicie los trabajos asociados a la tabla.