Как проверить статус приложений Spark из командной строки?
Чтобы проверить запущенные приложения в искры Apache, можно проверить их из веб-интерфейса по URL-адресу:
http://<master>:8080
Мой вопрос, как мы можем проверять запуск приложений с терминала, есть ли какая-либо команда, которая возвращает статус приложения?
Ответы
Ответ 1
Вы можете использовать spark-submit --status
(как описано в Освоение Apache Spark 2.0).
spark-submit --status [submission ID]
Смотрите код spark-submit для справки:
if (!master.startsWith("spark://") && !master.startsWith("mesos://")) {
SparkSubmit.printErrorAndExit(
"Requesting submission statuses is only supported in standalone or Mesos mode!")
}
Ответ 2
Если это для менеджеров кластера Spark Standalone или Apache Mesos, @sb0709 answer - это способ следовать.
Для YARN вы должны использовать приложение пряжи:
$ 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.
Ответ 3
Как и в моем случае, мое искровое приложение работает на Amazon AWS EMR удаленно. Поэтому я использую браузер командной строки Lynx для доступа к состоянию искрового приложения.
Пока вы отправили свое искровое задание с одного терминала, откройте другой терминал и выполните следующую команду с нового терминала.
**lynx http://localhost:<4043 or other spark job port>**
Ответ 4
Я обнаружил, что можно использовать REST API для отправки, убийства и получения статуса Spark-заданий. API REST открывается на master на порту 6066.
-
Чтобы создать задание, используйте следующую команду curl:
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"
}
}'
Ответ включает в себя успешность или неудачу вышеуказанной операции и представления.
{
'submissionId': 'driver-20170829014216-0001',
'serverSparkVersion': '2.2.0',
'success': True,
'message': 'Driver successfully submitted as driver-20170829014216-0001',
'action': 'CreateSubmissionResponse'
}
-
Чтобы удалить задание, используйте полученное выше сообщение:
curl -X POST http://spark-cluster-ip:6066/v1/submissions/kill/driver-driver-20170829014216-0001
В ответе снова содержится статус успеха/отказа:
{
'success': True,
'message': 'Kill request for driver-20170829014216-0001 submitted',
'action': 'KillSubmissionResponse',
'serverSparkVersion': '2.2.0',
'submissionId': 'driver-20170829014216-0001'
}
-
Чтобы получить статус, используйте следующую команду:
curl http://spark-cluster-ip:6066/v1/submissions/status/driver-20170829014216-0001
Ответ включает состояние драйвера - текущий статус приложения:
{
"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"
}
Я узнал о REST API здесь.