2017-04-20 1 views
-1

J'ai un cluster emr avec la configuration ci-dessous. Je cours sous spark-sql pour exécuter 5 scripts hive en parallèle.Surutilisation des ressources de fil avec étincelle

spark-sql --master yarn --num-executors 1 --executor-memory 20G --executor-cores 20 --driver-memory 4G -f hive1.hql & spark-sql --master yarn --num-executors 1 --executor-memory 20G --executor-cores 20 --driver-memory 4G -f hive2.hql & spark-sql --master yarn --num-executors 1 --executor-memory 20G --executor-cores 20 --driver-memory 4G -f hive3.hql & spark-sql --master yarn --num-executors 1 --executor-memory 20G --executor-cores 20 --driver-memory 4G -f hive4.hql & spark-sql --master yarn --num-executors 1 --executor-memory 20G --executor-cores 20 --driver-memory 4G -f hive5.hql 

Mais, 270 GB de mémoire est utilisée par fil.

Selon les paramètres de commande donnée,

Chaque emploi saprk devrait utiliser seulement 120 Go de RAM.

1 * 20 + 4 = 24 Go RAM

5 emplois = 5 * 24 = 120 Go

Mais, pourquoi le fil est en utilisant 270 Go de RAM? (Aucun autre travail hadoop n'est en cours dans le cluster)

Dois-je inclure un paramètre supplémentaire pour limiter l'utilisation des ressources de fil?

+0

Utilisez-vous le paramètre EMR: maximizeResourceAllocation true pour ce cluster? Il sera utilisé par défaut si vous le lancez depuis la console. –

+0

Oui. L'allocation dynamique des ressources est vraie pour ce cluster par défaut. Le changer en faux a résolu mon problème. Veuillez regarder dans la section des réponses pour plus d'explications. –

Répondre

1

Faites comme "spark.dynamicAllocation.enabled" fausse à étincelles defaults.conf (../../spark/spark-xxx/conf/spark-defaults.conf)

Cela devrait vous aider limiter/éviter l'allocation dynamique des ressources.

0

Même si nous avons défini la mémoire de l'exécuteur dans la commande, spark alloue dynamiquement de la mémoire si des ressources sont disponibles dans le cluster. Pour limiter l'utilisation de la mémoire à la mémoire de l'exécuteur uniquement, le paramètre d'allocation de mémoire dynamique spark doit être défini sur false.

Vous pouvez le modifier directement dans le fichier de configuration de l'étincelle ou transmettre le paramètre de configuration à la commande.

spark-sql --master yarn --num-executors 1 --executor-memory 20G --executor-cores 20 --driver-memory 4G --conf spark.dynamicAllocation.enabled=false -f hive1.hql 
+1

Évidemment. C'est le comportement attendu s'il est activé. Spark fournit un mécanisme pour ajuster dynamiquement les ressources que votre application occupe en fonction de la charge de travail. Cela signifie que votre application peut redonner des ressources au cluster si elles ne sont plus utilisées et les demander à nouveau plus tard lorsqu'il y a une demande. Cette fonctionnalité est particulièrement utile si plusieurs applications partagent des ressources dans votre cluster Spark. –