2016-08-10 3 views
1

Momentan verwende ich Spark-Submit, um eine Anwendung im Cluster-Modus zu starten. Die Antwort vom Master-Server gibt ein JSON-Objekt mit einer submissionId, mit der ich die Anwendung identifiziere und sie nötigenfalls abbringe. Allerdings habe ich keinen einfachen Weg gefunden, um die worker rest url von der Master-Server-Antwort oder die Treiber-ID (wahrscheinlich könnte Web-Abstreifen der Master-Web-UI, aber das wäre hässlich). Stattdessen muss ich warten, bis die Anwendung beendet ist, und dann die Anwendungsstatistiken vom Verlaufsserver abrufen.Spark: Überwachen einer Cluster-Modus-Anwendung

Gibt es eine Möglichkeit, die Treiber-ID zu verwenden, um die Arbeits-URL aus einer Anwendung zu identifizieren, die im Cluster-Modus bereitgestellt wird (normalerweise unter worker-node: 4040)?

16/08/12 11:39:47 INFO RestSubmissionClient: Submitting a request to launch an application in spark://192.yyy:6066. 
16/08/12 11:39:47 INFO RestSubmissionClient: Submission successfully created as driver-20160812114003-0001. Polling submission state... 
16/08/12 11:39:47 INFO RestSubmissionClient: Submitting a request for the status of submission driver-20160812114003-0001 in spark://192.yyy:6066. 
16/08/12 11:39:47 INFO RestSubmissionClient: State of driver driver-20160812114003-0001 is now RUNNING. 
16/08/12 11:39:47 INFO RestSubmissionClient: Driver is running on worker worker-20160812113715-192.xxx-46215 at 192.xxx:46215. 
16/08/12 11:39:47 INFO RestSubmissionClient: Server responded with CreateSubmissionResponse: 
{ 
    "action" : "CreateSubmissionResponse", 
    "message" : "Driver successfully submitted as driver-20160812114003-0001", 
    "serverSparkVersion" : "1.6.1", 
    "submissionId" : "driver-20160812114003-0001", 
    "success" : true 
} 

EDIT: Hier ist, was eine typische Ausgabe sieht aus wie mit log4j Konsolenausgabe bei DEBUG

Funken einreichen Befehl:

./apps/spark-2.0.0-bin-hadoop2.7/bin/spark-submit --master mesos://masterurl:7077 
    --verbose --class MainClass --deploy-mode cluster 
    ~/path/myjar.jar args 

Funken einreichen Ausgabe:

Using properties file: null 
Parsed arguments: 
    master     mesos://masterurl:7077 
    deployMode    cluster 
    executorMemory   null 
    executorCores   null 
    totalExecutorCores  null 
    propertiesFile   null 
    driverMemory   null 
    driverCores    null 
    driverExtraClassPath null 
    driverExtraLibraryPath null 
    driverExtraJavaOptions null 
    supervise    false 
    queue     null 
    numExecutors   null 
    files     null 
    pyFiles     null 
    archives    null 
    mainClass    MyApp 
    primaryResource   file:/path/myjar.jar 
    name     MyApp 
    childArgs    [args] 
    jars     null 
    packages    null 
    packagesExclusions  null 
    repositories   null 
    verbose     true 

Spark properties used, including those specified through 
--conf and those from the properties file null: 



Main class: 
org.apache.spark.deploy.rest.RestSubmissionClient 
Arguments: 
file:/path/myjar.jar 
MyApp 
args 
System properties: 
SPARK_SUBMIT -> true 
spark.driver.supervise -> false 
spark.app.name -> MyApp 
spark.jars -> file:/path/myjar.jar 
spark.submit.deployMode -> cluster 
spark.master -> mesos://masterurl:7077 
Classpath elements: 



16/08/17 13:26:49 INFO RestSubmissionClient: Submitting a request to launch an application in mesos://masterurl:7077. 
16/08/17 13:26:49 DEBUG RestSubmissionClient: Sending POST request to server at http://masterurl:7077/v1/submissions/create: 
{ 
    "action" : "CreateSubmissionRequest", 
    "appArgs" : [ args ], 
    "appResource" : "file:/path/myjar.jar", 
    "clientSparkVersion" : "2.0.0", 
    "environmentVariables" : { 
    "SPARK_SCALA_VERSION" : "2.10" 
    }, 
    "mainClass" : "SimpleSort", 
    "sparkProperties" : { 
    "spark.jars" : "file:/path/myjar.jar", 
    "spark.driver.supervise" : "false", 
    "spark.app.name" : "MyApp", 
    "spark.submit.deployMode" : "cluster", 
    "spark.master" : "mesos://masterurl:7077" 
    } 
} 
16/08/17 13:26:49 DEBUG RestSubmissionClient: Response from the server: 
{ 
    "action" : "CreateSubmissionResponse", 
    "serverSparkVersion" : "2.0.0", 
    "submissionId" : "driver-20160817132658-0004", 
    "success" : true 
} 
16/08/17 13:26:49 INFO RestSubmissionClient: Submission successfully created as driver-20160817132658-0004. Polling submission state... 
16/08/17 13:26:49 INFO RestSubmissionClient: Submitting a request for the status of submission driver-20160817132658-0004 in mesos://masterurl:7077. 
16/08/17 13:26:49 DEBUG RestSubmissionClient: Sending GET request to server at http://masterurl:7077/v1/submissions/status/driver-20160817132658-0004. 
16/08/17 13:26:49 DEBUG RestSubmissionClient: Response from the server: 
{ 
    "action" : "SubmissionStatusResponse", 
    "driverState" : "RUNNING", 
    "serverSparkVersion" : "2.0.0", 
    "submissionId" : "driver-20160817132658-0004", 
    "success" : true 
} 
16/08/17 13:26:49 INFO RestSubmissionClient: State of driver driver-20160817132658-0004 is now RUNNING. 
16/08/17 13:26:49 INFO RestSubmissionClient: Server responded with CreateSubmissionResponse: 
{ 
    "action" : "CreateSubmissionResponse", 
    "serverSparkVersion" : "2.0.0", 
    "submissionId" : "driver-20160817132658-0004", 
    "success" : true 
} 

Antwort

2

Gibt die Antwort des Masterservers keine Anwendungs-ID?

Ich glaube, alles, was Sie brauchen, ist die Master-URL und Anwendungs-ID Ihrer Anwendung für dieses Problem. Sobald Sie die Anwendungs-ID haben, verwenden Sie den Port 4040 bei der Master-URL und fügen Sie Ihren beabsichtigten Endpunkt an ihn an.

Zum Beispiel, wenn Ihre Anwendung ID ist application_1468141556944_1055

Um die Liste aller Jobs

http://<master>:4040/api/v1/applications/application_1468141556944_1055/jobs 

Um die Liste der gespeicherten RDDs

http://<master>:4040/api/v1/applications/application_1468141556944_1055/storage/rdd 

jedoch zu erhalten Wenn Sie keine Anwendungs-ID haben, würde ich wahrscheinlich mit folgendem beginnen:

Set verbose Modus (--verbose) beim Starten von Funke Job, um Anwendung ID auf der Konsole zu erhalten. Sie können dann für die Anwendungs-ID in der Protokollausgabe analysieren. Die Log-Ausgabe sieht in der Regel wie:

16/08/12 08:50:53 INFO Client: Application report for application_1468141556944_3791 (state: RUNNING) 

somit anwendungs ​​id application_1468141556944_3791

ist Sie können auch Master-url und applikations id durch Tracking-URL in der Protokollausgabe finden, die wie

aussieht

Diese Nachrichten sind auf INFO-Protokoll-Ebene, so stellen Sie sicher, dass Sie log4j.rootCategory=INFO, console in log4j setzen.Eigenschaftendatei, so dass Sie sie sehen können.

+0

Versucht --verbose, aber keine Anwendungs-ID. Protokollebenen sind bereits auf INFO eingestellt. Spark Version 1.6.1 btw – Rdesmond

+0

Ich sehe diese Ausgänge beim Starten von Funke-Job mit Spark-Submit auf meinem Bewerbungsglas. Ich habe die gleiche Version. Sie können entweder den DEBUG-Modus (anstelle von INFO) ausprobieren oder innerhalb des Codes die Anwendungs-ID an eine lokale Datei oder anderswo ausgeben, indem Sie die Funktion 'SparkContext.applicationId' verwenden. – arbazkhan002

+0

Das ist so komisch, dass ich die obige Frage bearbeiten werde – Rdesmond

0

Hatte den Funken ma kratzen ster web ui für eine Anwendungs-ID, die nahe ist (innerhalb derselben Minute) & dasselbe Suffix, z. 20161010025XXX-0005 mit X als Wildcard), suchen Sie danach nach der Arbeiter-URL im Link-Tag. Nicht schön, zuverlässig oder sicher, aber jetzt wird es funktionieren. Offen bleiben für den Fall, dass jemand einen anderen Ansatz verfolgt.

Verwandte Themen