Partitionnement de la charge de travail avec exécution limitée - AWS Glue

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Partitionnement de la charge de travail avec exécution limitée

Les erreurs dans les applications Spark proviennent généralement de scripts Spark inefficaces, d'exécution distribuée en mémoire de transformations à grande échelle et d'anomalies des jeux de données. Il existe de nombreuses raisons qui peuvent causer des problèmes de mémoire de pilote ou de l'exécuteur, par exemple une asymétrie de données, l'énumération d'un trop grand nombre d'objets ou de grands brassages de données. Ces problèmes apparaissent souvent lorsque vous traitez d'énormes quantités de données en attente avec Spark.

AWS Glue vous permet de résoudre les problèmes d'OOM (Out Of Memory) et de faciliter le traitement de votre ETL grâce au partitionnement de la charge de travail. Lorsque le partitionnement de la charge de travail est activé, chaque exécution de travail ETL ne sélectionne que les données non traitées, avec une limite supérieure sur la taille du jeu de données ou le nombre de fichiers à traiter avec cette exécution de tâche. Les futures exécutions de tâches traiteront les données restantes. Par exemple, si 1 000 fichiers doivent être traités, vous pouvez définir le nombre de fichiers à 500 et les séparer en deux exécutions de tâche.

Le partitionnement de charge de travail est pris en charge uniquement pour les sources de données Amazon S3.

Activation du partitionnement de la charge de travail

Vous pouvez activer l'exécution limitée en définissant manuellement les options dans votre script ou en ajoutant des propriétés de table de catalogue.

Pour activer le partitionnement de la charge de travail avec une exécution limitée dans votre script :
  1. Pour éviter le retraitement des données, activez les signets de tâche dans la nouvelle tâche ou celle existante. Pour plus d'informations, veuillez consulter la rubrique Suivi des données traitées à l'aide des signets de tâches.

  2. Modifiez votre script et définissez la limite limitée dans les options supplémentaires de l'API AWS Glue getSource. Vous devez également définir le contexte de transformation du signet de tâche pour stocker l'élément state. Par exemple :

    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", "")
Pour activer le partitionnement de la charge de travail avec une exécution limitée dans votre table de catalogue de données :
  1. Définissez les paires clé-valeur dans le champ parameters de votre structure de table dans le catalogue des données. Pour en savoir plus, veuillez consulter la rubrique Affichage et modification des détails de table.

  2. Définir la limite supérieure de la taille du jeu de données ou du nombre de fichiers traités :

    • Définir boundedSize à la taille cible du jeu de données, en octets. L'exécution de la tâche s'arrêtera après avoir atteint la taille cible de la table.

    • Définir boundedFiles au nombre cible de fichiers. L'exécution de la tâche s'arrêtera après le traitement du nombre cible de fichiers.

    Note

    Vous ne devez définir que boundedSize ou boundedFiles, car une seule limite est prise en charge.

Configuration d'un déclencheur AWS Glue pour exécuter automatiquement la tâche

Une fois que vous avez activé les limites d'exécution, vous pouvez configurer un déclencheur AWS Glue pour exécuter automatiquement la tâche et charger de manière incrémentielle les données dans des exécutions séquentielles. Accédez à la console AWS Glue et créez un déclencheur, configurez l'heure de planification et attachez-le à votre tâche. Ensuite, il déclenchera automatiquement l'exécution de la tâche suivante et traitera le nouveau lot de données.

Vous pouvez également utiliser les flux de travail AWS Glue pour orchestrer plusieurs tâches afin de traiter les données de différentes partitions en parallèle. Pour de plus amples informations, veuillez consulter les rubriques Déclencheurs AWS Glue et Flux de travail AWS Glue.

Pour plus d'informations sur les cas d'utilisation et les options, veuillez consulter le blog Optimisation des applications Spark avec partitionnement de la charge de travail dans AWS Glue.