web-dev-qa-db-fra.com

Comment limiter le nombre de tentatives en Spark échec du travail?

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?

enter image description here

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".

21
codingtwinky

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.

27
Jacek Laskowski

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

13
RNHTTR

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

3
Hamza Zafar