web-dev-qa-db-fra.com

spark on yarn, Container sorti avec un code de sortie non nul 143

J'utilise HDP 2.5, exécutant spark-submit en mode cluster de fils.

J'ai essayé de générer des données à l'aide de la jointure croisée de trames de données. c'est à dire

val generatedData = df1.join(df2).join(df3).join(df4)
generatedData.saveAsTable(...)....

df1 le niveau de stockage est MEMORY_AND_DISK

df2, df3, df4 le niveau de stockage est MEMORY_ONLY

df1 a beaucoup plus d'enregistrements soit 5 millions tandis que df2 à df4 a au plus 100 enregistrements. ce faisant, mon explication simple entraînerait de meilleures performances en utilisant BroadcastNestedLoopJoin plan d'explication.

pour une raison quelconque, il échoue toujours. Je ne sais pas comment le déboguer et où la mémoire explose.

Sortie du journal des erreurs:

16/12/06 19:44:08 WARN YarnAllocator: Container marked as failed: container_e33_1480922439133_0845_02_000002 on Host: hdp4. Exit status: 143. Diagnostics: Container killed on request. Exit code is 143
Container exited with a non-zero exit code 143
Killed by external signal

16/12/06 19:44:08 WARN YarnSchedulerBackend$YarnSchedulerEndpoint: Container marked as failed: container_e33_1480922439133_0845_02_000002 on Host: hdp4. Exit status: 143. Diagnostics: Container killed on request. Exit code is 143
Container exited with a non-zero exit code 143
Killed by external signal

16/12/06 19:44:08 ERROR YarnClusterScheduler: Lost executor 1 on hdp4: Container marked as failed: container_e33_1480922439133_0845_02_000002 on Host: hdp4. Exit status: 143. Diagnostics: Container killed on request. Exit code is 143
Container exited with a non-zero exit code 143
Killed by external signal

16/12/06 19:44:08 WARN TaskSetManager: Lost task 1.0 in stage 12.0 (TID 19, hdp4): ExecutorLostFailure (executor 1 exited caused by one of the running tasks) Reason: Container marked as failed: container_e33_1480922439133_0845_02_000002 on Host: hdp4. Exit status: 143. Diagnostics: Container killed on request. Exit code is 143
Container exited with a non-zero exit code 143
Killed by external signal

Je n'ai vu aucun journal WARN ou ERROR avant cette erreur. Quel est le problème? où dois-je rechercher la consommation de mémoire? Je ne vois rien sur l'onglet Stockage de SparkUI. le journal provient de I du gestionnaire de ressources de fil sur HDP 2.5

MODIFIER en regardant le journal du conteneur, il semble que ce soit un Java.lang.OutOfMemoryError: GC overhead limit exceeded

Je sais augmenter la mémoire, mais je n'ai plus de mémoire. Comment puis-je faire une jointure cartésienne/produit avec 4 Dataframes sans obtenir cette erreur.

7
David H

Le fichier journal de tous les conteneurs et suis disponible sur,

yarn logs -applicationId application_1480922439133_0845_02

Si vous voulez juste des journaux AM,

yarn logs -am -applicationId application_1480922439133_0845_02

Si vous souhaitez rechercher des conteneurs exécutés pour ce travail,

yarn logs -applicationId application_1480922439133_0845_02|grep container_e33_1480922439133_0845_02

Si vous voulez un seul journal de conteneur,

yarn logs -containerId container_e33_1480922439133_0845_02_000002

Et pour que ces commandes fonctionnent, l'agrégation des journaux doit avoir été définie sur true, sinon vous devrez obtenir les journaux des répertoires de chaque serveur.

pdate Il n'y a rien que vous puissiez faire en dehors d'essayer de permuter, mais cela dégradera beaucoup les performances.

La limite de surcharge du GC signifie que le GC a fonctionné sans interruption et rapidement, mais qu'il n'a pas pu récupérer beaucoup de mémoire. La seule raison à cela est que le code a été mal écrit et a beaucoup de références (ce qui est douteux, car vous effectuez une jointure simple), ou que la capacité de la mémoire est atteinte.

5
Abhishek Anand