2017-03-06 2 views
9

Je suis en train d'exécuter un travail Spark très simple sur AWS EMR et ne semble pas obtenir de sortie de journal de mon script.AWS EMR Enregistrement Spark Python

J'ai essayé avec l'impression à stderr:

from pyspark import SparkContext 
import sys 

if __name__ == '__main__': 
    sc = SparkContext(appName="HelloWorld") 
    print('Hello, world!', file=sys.stderr) 
    sc.stop() 

Et en utilisant l'enregistreur d'allumage comme indiqué here:

from pyspark import SparkContext 

if __name__ == '__main__': 
    sc = SparkContext(appName="HelloWorld") 

    log4jLogger = sc._jvm.org.apache.log4j 
    logger = log4jLogger.LogManager.getLogger(__name__) 
    logger.error('Hello, world!') 

    sc.stop() 

DME me donne deux fichiers journaux après l'exécution du travail: controller et stderr . Aucun journal contient la chaîne "Hello, world!". C'est ma compréhension du stdout est redirigé vers stderr en étincelle. Le journal stderr indique que le travail a été accepté, exécuté et terminé avec succès. Donc, ma question est, où puis-je voir la sortie du journal de mon script? Ou que devrais-je changer dans mon script pour me connecter correctement?

Edit: J'ai utilisé cette commande pour soumettre l'étape:

aws emr add-steps --region us-west-2 --cluster-id x-XXXXXXXXXXXXX --steps Type=spark,Name=HelloWorld,Args=[--deploy-mode,cluster,--master,yarn,--conf,spark.yarn.submit.waitAppCompletion=true,s3a://path/to/simplejob.py],ActionOnFailure=CONTINUE 
+0

Avec quels paramètres avez-vous soumis le travail à EMR? – user3154952

+1

J'ai trouvé que la journalisation pour des étapes particulières ne se termine presque jamais dans les journaux de contrôleur ou de stderr que la console EMR tire à côté de la marche. Habituellement, je trouve ce que je veux dans les journaux de conteneur du travail (et généralement dans stdout). Ils sont généralement à un chemin comme 's3: // mybucket/logs/emr/étincelle/j-XXXXXX/conteneurs/application_XXXXXXXXX/container_XXXXXXX/...' –

+0

@GregReda J'ai trouvé les journaux là-bas. Je vous remercie! Si vous postez comme réponse, je l'accepterai. – jarbaugh

Répondre

4

J'ai trouvé que l'exploitation forestière de DME pour les étapes particulières des vents presque jamais dans les journaux de contrôleur ou STDERR ballotés à côté de l'étape du Console AWS.

Habituellement, je trouve ce que je veux dans le du travail des journaux de conteneurs (et généralement il est dans stdout).

Ils sont généralement à un chemin comme s3://mybucket/logs/emr/spark/j-XXXXXX/containers/application‌​_XXXXXXXXX/container‌​_XXXXXXX/.... Vous pourriez avoir besoin de fouiller dans les différents répertoires application_... et container_... au sein de containers. Ce dernier répertoire de conteneur doit avoir un stdout.log et un stderr.log.

0

Pour capturer la sortie du script, vous pouvez essayer quelque chose comme ci-dessous et

/usr/bin/spark-submit --master yarn --num-executors 300 myjob.py param1 > s3://databucket/log.out 2>&1 & 

Cela va écrire la sortie de script dans un fichier journal à l'emplacement s3.