Gestion des ressources

Les pipelines vous permettent de spécifier les processeurs et la mémoire à attribuer 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 consignes sur la quantité de ressources de pilote et d'exécuteur à à configurer pour votre cas d'utilisation.

Driver

Comme le pilote ne fait pas beaucoup de travail, la valeur par défaut de 1 processeur et 2 Go de mémoire pour exécuter la plupart des pipelines. Vous devrez peut-être augmenter la mémoire des pipelines contenant de nombreuses é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 CPU attribués à un exécuteur détermine le nombre de tâches que l'exécuteur peut s'exécuter en parallèle. Chaque partition de données nécessite une tâche de traitement. Dans la plupart des cas, il est plus simple de définir le nombre de CPU sur un, et nous allons plutôt nous concentrer 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 dans le pipeline. Des 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 augmentant la quantité de mémoire, mais cela nécessite une bonne compréhension à la fois pour vos données et votre pipeline.

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

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

La section "Stockage et exécution" est ensuite divisée en espaces distincts pour le stockage et l'exécution. Par défaut, ces espaces sont de la même taille, mais vous pouvez les ajuster en définissant spark.memory.storageFraction (par défaut, 0,5) pour contrôler le pourcentage de l'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. Si l'espace est insuffisant dans la section d'exécution, Spark peut en utiliser une partie pour stocker des données. Toutefois, les données d'exécution n'utilisent jamais l'espace de stockage.

Si vous savez que votre pipeline ne met pas en cache des données, vous pouvez réduire l'espace de stockage pour laisser plus de place aux 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 dédiée aux segments de mémoire les exécuteurs. Spark ajoute une quantité supplémentaire de mémoire pour la mémoire hors tas, qui est contrôlée par le paramètre spark.executor.memoryOverhead, qui est défini par défaut sur 384 Mo. Cela signifie que la quantité de réserves YARN de mémoire pour chaque exécuteur est supérieur au nombre défini dans la configuration des ressources du pipeline. Par exemple, si vous définissez la mémoire de l'exécuteur sur 2 048 Mo, Spark ajoute 384 Mo à ce nombre et demande à YARN un conteneur de 2 432 Mo. De plus, YARN arrondit le numéro de requête à un multiple de yarn.scheduler.increment-allocation-mb, qui est défini par défaut sur la valeur yarn.scheduler.minimum-allocation-mb. Si elle est définie sur 512, YARN arrondit 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. Gardez ce point à l'esprit lorsque vous déterminez la taille de chaque nœud de calcul de votre cluster.