Comment optimiser mes applications AWS Glue ETL lors de la lecture ou de l'écriture dans Amazon DynamoDB ?

Date de la dernière mise à jour : 16/08/2021

Je souhaite optimiser ma tâche Extract-transform-load (ETL) AWS Glue pour lire ou écrire dans Amazon DynamoDB.

-ou-

Ma tâche AWS Glue ETL provoque une exception de limitation pour ma table DynamoDB.

Résolution

Avant de créer une tâche AWS Glue ETL pour lire ou écrire dans une table DynamoDB, tenez compte des mises à jour de configuration suivantes. Ces mises à jour peuvent aider à optimiser l'utilisation des ressources dans AWS Glue et DynamoDB.

Lire depuis DynamoDB

  • dynamodb.through put.read.percent : Cette variable de configuration indique le pourcentage d'unités de capacité de lecture (RCU) à utiliser. La valeur par défaut de cette variable est définie sur 0,5. Les valeurs acceptables vont de 0,1 à 1,5, inclusivement. Une valeur de 0,5 indique que le travail AWS Glue tente de consommer la moitié de la capacité de lecture de la table. Le taux de lecture réel varie en fonction de plusieurs facteurs, par exemple s'il existe une distribution de clés uniforme dans la table DynamoDB.
    Utilisez cet exemple pour calculer la durée d'exécution approximative de votre tâche : supposons que vous ayez provisionné 100 RCU pour votre table DynamoDB. Avec 1 RCU, vous pouvez lire 4 Ko de données. Avec 100 RCU, vous pouvez effectuer 100 lectures de 409 600 octets par seconde. Supposons que votre table contient 20 Go (21 474 836 480 octets) de données et que vous ayez défini la valeur de dynamodb.throughput.read.percent sur 1,0. Cela signifie que votre tâche effectue une analyse complète de la table avec 100 % des RCU.
    Vous pouvez ensuite calculer la durée d'exécution approximative de votre tâche comme suit :
    Taille de votre table/Octets lus par seconde = 21 474 836 480/409 600 = 52 429 secondes = 14,56 heures
    Pour réduire la durée d'exécution de votre tâche, vous pouvez augmenter le nombre de RCU en définissant la valeur appropriée pour dynamodb.throughput.read.percent. Pour plus d'informations, consultez Capacité de lecture.
    Si votre table DynamoDB est volumineuse, choisissez pour votre table le mode de capacité de lecture/d'écriture À la demande plutôt que le mode Alloué. Vous pouvez choisir le mode de capacité de lecture/d'écriture À la demande lors de la création d'une nouvelle table, ou mettre à jour ce paramètre dans l'onglet Capacité des tables existantes. Pour plus d'informations, voir Mode de capacité de lecture/d'écriture.
  • dynamodb.splits : cette option de connexion définit le nombre de fractionnements dans lesquels la table est partitionnée lors de la lecture des données. La valeur par défaut est définie sur 1. Les valeurs acceptables vont de 1 à 10 000 000, inclusivement. La valeur 1 signifie qu'il n'y a pas de parallélisme. Il est recommandé de définir une valeur plus élevée pour cette variable. La quantité de parallélisme possible dépend du type de travail AWS Glue et du nombre d'agents configurés pour la tâche. Pour calculer le paramètre numSlots qui peut être utilisé comme valeur pour dynamodb.splits, utilisez la formule sous « dynamodb.splits » dans « connectionType » : « dynamodb » en tant que source.

Écrire dans DynamoDB

  • dynamodb.throughput.write.percent : cette variable de configuration définit le pourcentage d'unités de capacité d'écriture (WCU) à utiliser. La valeur par défaut est définie sur 0,5. Les valeurs acceptables vont de 0,1 à 1,5, inclusivement. Une valeur de 0,5 signifie qu'AWS Glue tente de consommer la moitié de la capacité d'écriture de la table. Le taux d'écriture réel varie en fonction de plusieurs facteurs, par exemple s'il existe une distribution de clés uniforme dans la table DynamoDB. Mettez à jour la valeur de cette variable en fonction de votre cas d'utilisation.
    Si votre table DynamoDB est volumineuse, il est recommandé de choisir pour votre table le mode de capacité de lecture/d'écriture À la demande plutôt que le mode Alloué.
    Pour plus d'informations, voir « dynamodb.throughput.write.percent » sous « connectionType » : « dynamodb » en tant que Sink.
  • dynamodb.output.numParallelTasks : cette option de connexion définit le nombre de tâches parallèles qui écrivent simultanément dans DynamoDB. Notez qu'il s'agit d'un paramètre facultatif. Si vous ne spécifiez pas ce paramètre, la valeur numParallelTasks est calculée en fonction des paramètres numPartitions, numSlots et numExecutors. Cette valeur peut être utilisée pour dynamodb.output.numParallelTasks. Pour obtenir la formule détaillée, voir « dynamodb.output.numParallelTasks » sous « connectionType » : « dynamodb » en tant que Sink.

Pour obtenir des exemples de code qui montrent comment lire et écrire dans des tables DynamoDB, voir Exemples de code.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?