Partición de cargas de trabajo con ejecución limitada - AWS Glue

Partición de cargas de trabajo con ejecución limitada

Los errores en las aplicaciones de Spark suelen deberse a scripts de Spark ineficientes, a la ejecución distribuida en memoria de transformaciones a gran escala y a anomalías de los conjuntos de datos. Hay muchas razones que pueden causar problemas de memoria al controlador o al ejecutor, por ejemplo, un sesgo de datos, una lista con demasiados objetos o mezclas aleatorias importantes de datos. Estos problemas suelen aparecer cuando se procesan grandes cantidades de datos pendientes con Spark.

AWS Glue le permite resolver problemas de memoria insuficiente y facilitar el procesamiento de ETL con la partición de carga de trabajo. Si habilita la partición de carga de trabajo, cada ejecución de trabajo de ETL solo selecciona datos no procesados, con un límite superior en el tamaño del conjunto de datos o la cantidad de archivos que se van a procesar con esta ejecución de trabajo. Las ejecuciones de trabajos futuras procesarán los datos restantes. Por ejemplo, si hay 1000 archivos que necesitan ser procesados, puede establecer el número de archivos en 500 y separarlos en dos ejecuciones de trabajos.

La partición de carga de trabajo sólo se admite para orígenes de datos de Amazon S3.

Habilitar la partición de carga de trabajo

Puede habilitar la ejecución limitada mediante la configuración manual de las opciones en el script o mediante el agregado de propiedades a la tabla del catálogo.

Para habilitar la partición de carga de trabajo con ejecución limitada en el script:
  1. Para evitar el reprocesamiento de datos, habilite los marcadores de trabajos en el trabajo nuevo o en el trabajo existente. Para obtener más información, consulte Seguimiento de los datos procesados mediante marcadores de trabajo.

  2. Modifique el script y establezca el límite delimitado en las opciones adicionales de la API getSource de AWS Glue. También debe establecer el contexto de transformación para que el marcador de trabajo almacene el elemento state. Por ejemplo:

    Python

    glueContext.create_dynamic_frame.from_catalog( database = "database", table_name = "table_name", redshift_tmp_dir = "", transformation_ctx = "datasource0", additional_options = { "boundedFiles" : "500", # need to be string # "boundedSize" : "1000000000" unit is byte } )

    Scala

    val datasource0 = glueContext.getCatalogSource( database = "database", tableName = "table_name", redshiftTmpDir = "", transformationContext = "datasource0", additionalOptions = JsonOptions( Map("boundedFiles" -> "500") // need to be string //"boundedSize" -> "1000000000" unit is byte ) ).getDynamicFrame()
    val connectionOptions = JsonOptions( Map("paths" -> List(baseLocation), "boundedFiles" -> "30") ) val source = glueContext.getSource("s3", connectionOptions, "datasource0", "")
Para habilitar la partición de carga de trabajo con ejecución limitada en la tabla de Data Catalog:
  1. Configure los pares clave-valor en el campo parameters de la estructura de su tabla en Data Catalog. Para obtener más información, consulte Visualización y edición de los detalles de la tabla.

  2. Configure el límite superior para el tamaño del conjunto de datos o la cantidad de archivos procesados:

    • Configure el boundedSize al tamaño objetivo del conjunto de datos en bytes. La ejecución del trabajo se detendrá después de alcanzar el tamaño objetivo de la tabla.

    • Configure boundedFiles a la cantidad de archivos objetivo. La ejecución del trabajo se detendrá después de procesar la cantidad de archivos objetivo.

    nota

    Solo debe configurar uno entre boundedSize o boundedFiles, ya que solo se soporta un único límite.

Configuración de un desencadenador de AWS Glue para ejecutar el trabajo en forma automática

Una vez que haya habilitado la ejecución limitada, puede configurar un desencadenador de AWS Glue para ejecutar el trabajo en forma automática y cargar los datos de forma progresiva en ejecuciones secuenciales. Diríjase a la consola de AWS Glue y cree un desencadenador, configure la hora programada y adjúntelo a su trabajo. Se desencadenará automáticamente la siguiente ejecución del trabajo y se procesará el nuevo lote de datos.

También puede utilizar los flujos de trabajo de AWS Glue u orquestar múltiples trabajos para procesar datos de diferentes particiones en paralelo. Para obtener más información, consulte Desencadenadores de AWS Glue y Flujos de trabajo de AWS Glue.

Para obtener más información sobre los casos de uso y las opciones, consulte el blog Optimizing Spark applications with workload partitioning in AWS Glue (Optimización de aplicaciones de Spark con partición de carga de trabajo en Glue).