Gestion des ressources

Les pipelines vous permettent de spécifier les processeurs et la mémoire à fournir au pilote et à chaque exécuteur. Vous pouvez configurer des ressources dans les configurations de pipeline Cloud Data Fusion Studio. Pour en savoir plus, consultez la page Gérer les configurations de pipeline.

Cette page fournit des instructions sur la quantité de ressources de pilote et d'exécuteur à configurer pour votre cas d'utilisation.

Pilote

Comme le pilote ne effectue pas beaucoup de travail, un processeur et 2 Go de mémoire par défaut suffisent pour exécuter la plupart des pipelines. Vous devrez peut-être augmenter la quantité de mémoire pour les pipelines contenant plusieurs étapes ou des schémas volumineux. Comme indiqué dans la section Traitement parallèle des jointures, si le pipeline effectue des jointures en mémoire, les ensembles de données en mémoire doivent également tenir dans la mémoire du pilote.

Executor

Tenez compte des consignes suivantes concernant les ressources de processeur et de mémoire.

Processeur

Le nombre de processeurs attribués à un exécuteur détermine le nombre de tâches qu'il peut exécuter en parallèle. Chaque partition de données nécessite une tâche à traiter. Dans la plupart des cas, il est plus simple de définir le nombre de processeurs sur un et de se concentrer plutôt sur l'ajustement de la mémoire.

Mémoire

Pour la plupart des pipelines, 4 Go de mémoire de l'exécuteur suffisent pour exécuter correctement le pipeline. Les jointures de plusieurs téraoctets fortement asymétriques ont été complétées avec 4 Go de mémoire pour l'exécuteur. Il est possible d'améliorer la vitesse d'exécution en augmentant la quantité de mémoire, mais cela nécessite une bonne compréhension de vos données et de votre pipeline.

Spark divise la mémoire en plusieurs sections. Une section est réservée à l'utilisation interne de Spark, tandis qu'une autre est réservée à l'exécution et au stockage.

Par défaut, la section de stockage et d'exécution représente environ 60% de la mémoire totale. La propriété spark.memory.fraction configuration de Spark (0,6 par défaut) contrôle ce pourcentage. Cette valeur est adaptée à la plupart des charges de travail et n'a normalement pas besoin d'être ajustée.

La section de stockage et d'exécution est elle-même divisée en espaces distincts pour le stockage et l'exécution. Par défaut, ces espaces ont la même taille, mais vous pouvez les ajuster en définissant spark.memory.storageFraction (0,5 par défaut) pour contrôler le pourcentage d'espace réservé au stockage.

L'espace de stockage stocke les données mises en cache. L'espace d'exécution stocke les données de brassage, de jointure, de tri et d'agrégation. S'il y a de l'espace supplémentaire dans la section d'exécution, Spark peut en utiliser une partie pour stocker les données. Toutefois, les données d'exécution n'utilisent jamais l'espace de stockage.

Si vous savez que votre pipeline ne met aucune donnée en cache, vous pouvez réduire la fraction du stockage afin de laisser plus de place pour les exigences d'exécution.

Point à prendre en compte: mémoire du conteneur YARN

Le paramètre de mémoire de l'exécuteur contrôle la quantité de mémoire du tas de mémoire fournie aux exécuteurs. Spark ajoute une quantité de mémoire supplémentaire pour la mémoire hors tas de mémoire, qui est contrôlée par le paramètre spark.executor.memoryOverhead, dont la valeur par défaut est de 384 m. Cela signifie que la quantité de mémoire YARN réservée pour chaque exécuteur est supérieure au nombre défini dans la configuration des ressources de pipeline. Par exemple, si vous définissez la mémoire de l'exécuteur sur 2 048 millicœurs, Spark ajoute 384 millicœurs à ce nombre et demande YARN pour un conteneur de 2 432 millicœurs. De plus, YARN arrondit le numéro de requête au multiple de yarn.scheduler.increment-allocation-mb, dont la valeur par défaut est yarn.scheduler.minimum-allocation-mb. S'il est défini sur 512, YARN arrondit la valeur 2 432 m à 2 560 m. Si la valeur est définie sur 1024, YARN arrondit la valeur de 2 432 m à 3 072 m. Ce point est utile à garder à l'esprit lorsque vous déterminez la taille de chaque nœud de calcul de votre cluster.