2017-02-01 1 views
5

J'essaie d'exécuter une application spark écrite dans scala 11.8, spark 2.1 sur un cluster EMR version 5.3.0. J'ai configuré le cluster avec le JSON suivant:Qu'est-ce que spark exitCode: 12 signifie?

[ 
    { 
    "Classification": "hadoop-env", 
    "Configurations": [ 
     { 
      "Classification": "export", 
      "Configurations": [], 
      "Properties": { 
       "JAVA_HOME": "/usr/lib/jvm/java-1.8.0" 
      } 
     } 
    ], 
    "Properties": {} 
    }, 
    { 
    "Classification": "spark-env", 
    "Configurations": [ 
     { 
      "Classification": "export", 
      "Configurations": [], 
      "Properties": { 
       "JAVA_HOME": "/usr/lib/jvm/java-1.8.0" 
      } 
     } 
    ], 
    "Properties": {} 
    } 
] 

si je suis en train de fonctionner sur un mode client tout fonctionne très bien. lorsque vous essayez d'exécuter l'application avec mode cluster, il a échoué avec le code d'état 12.

Voici une partie du journal de maître où je vois le code d'état:

17/02/01 10:08:26 INFO TaskSetManager: Tâche terminée 79.0 dans l'étape 0.0 (TID 79) dans 293 ms sur ip-10-234-174-231.us-west-2.compute.internal (exécuteur 2) (78/11102) 17/02/01 10:08:27 INFO YarnAllocator: Le pilote a demandé un nombre total de 19290 exécuteur (s). 17/02/01 10:08:27 INFO ApplicationMaster: Statut de l'application finale: FAILED, exitCode: 12, (raison: l'exception a été émise 1 fois de thread Reporter.) 17/02/01 10:08: 27 INFO SparkContext: arrêt Invoquer() du crochet d'arrêt

MISE à JOUR:

Dans le cadre du travail que je dois lire des données de s3, quelque chose comme ceci: sc.textFile("s3n://stambucket/impressions/*/2017-01-0[1-9]/*/impression_recdate*) Si je prends une seule jour, il n'y a pas d'erreurs. Mais avec 9 je reçois ce code de sortie 12. C'est encore plus étrange compte tenu du fait que 9 jours en cours d'exécution en mode client très bien.

+0

recherche sur Google vous suggère que cela signifie loupez un peu fichiers jar. Cela correspondrait à travailler localement mais pas sur un cluster. Vérifiez que vous avez configuré les choses de manière à ce que les bons jarres soient disponibles partout, –

+0

emr-5.x utilise déjà Java 8 par défaut, vos configurations sont donc inutiles. Je ne pense pas qu'ils seraient la source de ce problème, mais je recommanderais de supprimer ces configurations. –

+0

@TheArchetypalPaul Si c'est effectivement le cas, comment dois-je savoir quel pot est manquant? Pouvez-vous partager la référence que vous avez trouvée? – NetanelRabinowitz

Répondre

2

Le code de sortie 12 est un exit code in linux standard pour signaler une insuffisance de mémoire. Spark définit la quantité de mémoire par défaut à utiliser par processus d'exécution à 1 Go. EMR ne remplacera pas cette valeur quelle que soit la quantité de mémoire disponible sur les nœuds/maîtres du cluster. Une solution possible consiste à définir l'indicateur maximizeResourceAllocation sur true.

1

Essayez d'augmenter tas Java ApplicationMaster de spark.yarn.am.memory = 2G ou mis maxExecutors à une valeur raisonnable spark.dynamicAllocation.maxExecutors = 400

https://issues.apache.org/jira/browse/SPARK-19226

+0

Pourquoi 400 est une valeur raisonnable? – Davos

+0

En outre, EMR fonctionne en mode cluster, sauf si vous utilisez 'spark-submit' avec l'ensemble' --deploy-mode' en mode client - voir https://aws.amazon.com/blogs/big-data/submitting- user-applications-with-spark-submit /. Selon l'étincelle docs http://spark.apache.org/docs/latest/running-on-yarn.html Le paramètre 'spark.yarn.am.memory' s'applique uniquement au mode client, et vous devriez utiliser' spark. driver.memory' pour le mode cluster. – Davos