0

Ich verwende meine Spark-Anwendung auf EMR und habe mehrere println() -Anweisungen. Anders als die Konsole, wo werden diese Anweisungen protokolliert?Wo speichert EMR Spark stdout?

Mein S3 aws-logs Verzeichnisstruktur für mein Cluster wie folgt aussieht:

node ├── i-0031cd7a536a42g1e │   ├── applications │   ├── bootstrap-actions │   ├── daemons │   ├── provision-node │   └── setup-devices containers/ ├── application_12341331455631_0001 │   ├── container_12341331455631_0001_01_000001

+1

Anzeigen von Protokolldateien: http://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-manage-view-web-log- Dateien.html –

Antwort

0

Es gibt eine sehr wichtige Sache, die Sie beachten müssen, wenn sie von Spark-Druck: werden Sie Code ausgeführt wird, der ausgeführt wird im Treiber oder ist es Code, der im Executor läuft?

Zum Beispiel, wenn Sie die folgende tun, wird es Ausgabe in der Konsole, wie Sie sind Daten zurück an den Fahrer zu bringen:

for i in your_rdd.collect(): 
    print i 

aber die folgenden innerhalb eines Testamentsvollstreckers laufen und so wird es sein geschrieben in den Spark-Protokollen:

Gehen wir nun zu Ihrer ursprünglichen Frage, der zweite Fall wird in den Protokollspeicherort schreiben. Protokolle werden normalerweise auf den Master-Knoten geschrieben, der sich in/mnt/var/log/hadoop/steps befindet, aber es ist möglicherweise besser, Protokolle mit slog-uri in einem s3-Bucket zu konfigurieren. Auf diese Weise wird es einfacher zu finden sein.

0

Sie können println die in wenigen Orten finden:

  • Resource Manager -> Ihre Bewerbung -> Protokolle -> stdout
  • Ihr S3 Protokollverzeichnis ->containers/application_.../container_.../stdout (obwohl dies dauert ein paar Minuten zu füllen nach der Anwendung)
  • SSH in die EMR, yarn logs -applicationId <Application ID> -log_files <log_file_type>