Pour vérifier les applications en cours d'exécution dans Apache Spark, vous pouvez les vérifier à partir de l'interface Web sur l'URL:
http://<master>:8080
Ma question est la suivante: comment vérifier que les applications en cours d'exécution sont exécutées depuis un terminal? Existe-t-il une commande qui renvoie le statut des applications?
Si c'est pour les gestionnaires de cluster Spark Standalone ou Apache Mesos, la réponse de @ sb0709 est la méthode à suivre.
Pour YARN, vous devez utiliser application de fil commande:
$ yarn application -help
usage: application
-appStates <States> Works with -list to filter applications
based on input comma-separated list of
application states. The valid application
state can be one of the following:
ALL,NEW,NEW_SAVING,SUBMITTED,ACCEPTED,RUN
NING,FINISHED,FAILED,KILLED
-appTypes <Types> Works with -list to filter applications
based on input comma-separated list of
application types.
-help Displays help for all commands.
-kill <Application ID> Kills the application.
-list List applications. Supports optional use
of -appTypes to filter applications based
on application type, and -appStates to
filter applications based on application
state.
-movetoqueue <Application ID> Moves the application to a different
queue.
-queue <Queue Name> Works with the movetoqueue command to
specify which queue to move an
application to.
-status <Application ID> Prints the status of the application.
Vous pouvez utiliser spark-submit --status
(comme décrit dans Mastering Apache Spark 2.0 ).
spark-submit --status [submission ID]
Voir le code de spark-submit pour référence:
if (!master.startsWith("spark://") && !master.startsWith("mesos://")) {
SparkSubmit.printErrorAndExit(
"Requesting submission statuses is only supported in standalone or Mesos mode!")
}
J'ai constaté qu'il était possible d'utiliser l'API REST pour soumettre, supprimer et obtenir l'état des travaux Spark. L'API REST est exposée sur le maître sur le port 6066.
Pour créer le travail, utilisez la commande curl suivante:
curl -X POST http://spark-cluster-ip:6066/v1/submissions/create
--header "Content-Type:application/json;charset=UTF-8"
--data
'{
"action" : "CreateSubmissionRequest",
"appArgs" : [ "blah" ],
"appResource" : "path-to-jar-file",
"clientSparkVersion" : "2.2.0",
"environmentVariables" : { "SPARK_ENV_LOADED" : "1" },
"mainClass" : "app-class",
"sparkProperties" : {
"spark.jars" : "path-to-jar-file",
"spark.driver.supervise" : "false",
"spark.app.name" : "app-name",
"spark.submit.deployMode" : "cluster",
"spark.master" : "spark://spark-master-ip:6066"
}
}'
La réponse inclut le succès ou l’échec de l’opération ci-dessus et de submitId
{
'submissionId': 'driver-20170829014216-0001',
'serverSparkVersion': '2.2.0',
'success': True,
'message': 'Driver successfully submitted as driver-20170829014216-0001',
'action': 'CreateSubmissionResponse'
}
Pour supprimer le travail, utilisez le submissionId obtenu ci-dessus:
curl -X POST http://spark-cluster-ip:6066/v1/submissions/kill/driver-driver-20170829014216-0001
La réponse contient à nouveau le statut succès/échec:
{
'success': True,
'message': 'Kill request for driver-20170829014216-0001 submitted',
'action': 'KillSubmissionResponse',
'serverSparkVersion': '2.2.0',
'submissionId': 'driver-20170829014216-0001'
}
Pour obtenir le statut, utilisez la commande suivante:
curl http://spark-cluster-ip:6066/v1/submissions/status/driver-20170829014216-0001
La réponse comprend l'état du pilote - statut actuel de l'application:
{
"action" : "SubmissionStatusResponse",
"driverState" : "RUNNING",
"serverSparkVersion" : "2.2.0",
"submissionId" : "driver-20170829203736-0004",
"success" : true,
"workerHostPort" : "10.32.1.18:38317",
"workerId" : "worker-20170829013941-10.32.1.18-38317"
}
J'ai découvert REST API ici .
Comme dans mon cas, mon application spark s'exécute à distance sur AWS EMR d'Amazon. J'utilise donc le navigateur de ligne de commande Lynx pour accéder au statut de l'application étincelle . Alors que vous avez envoyé votre travail d'étincelle depuis un terminal, ouvrez un autre terminal et lancez la commande suivante depuis le nouveau terminal.
**lynx http://localhost:<4043 or other spark job port>**