Nous exécutons une tâche Spark via spark-submit
, et je peux voir que le travail sera soumis à nouveau en cas d'échec.
Comment puis-je l'empêcher d'avoir la tentative # 2 en cas de défaillance du conteneur de fil ou quelle que soit l'exception?
Cela s'est produit en raison d'un manque de mémoire et d'un problème de "limite de surcharge du GC dépassée".
Il existe deux paramètres qui contrôlent le nombre de tentatives (c'est-à-dire que le nombre maximal de ApplicationMaster
tentatives d'enregistrement avec YARN est considéré comme ayant échoué et donc l'ensemble Spark application):
spark.yarn.maxAppAttempts
- Le réglage de Spark. Voir MAX_APP_ATTEMPTS :
private[spark] val MAX_APP_ATTEMPTS = ConfigBuilder("spark.yarn.maxAppAttempts")
.doc("Maximum number of AM attempts before failing the app.")
.intConf
.createOptional
yarn.resourcemanager.am.max-attempts
- Le propre paramètre de YARN, la valeur par défaut étant 2.
(Comme vous pouvez le voir dans YarnRMClient.getMaxRegAttempts ) le nombre réel est le minimum des paramètres de configuration de YARN et Spark avec YARN étant le dernier recours.
Une solution indépendante du langage de programmation/API serait de définir les tentatives de fil max comme argument de ligne de commande:
spark-submit --conf spark.yarn.maxAppAttempts=1 <application_name>
Voir @code's réponse
Ajoutez la propriété yarn.resourcemanager.am.max-attempts
dans votre fichier yarn-default.xml. Il spécifie le nombre maximal de tentatives d'application.
Pour plus de détails, regardez ceci lien