#scala #rest #apache-spark
#отдых #apache-spark
Вопрос:
Следуя инструкциям на этом веб-сайте, я пытаюсь отправить задание в Spark через REST API /v1/submissions
.
Я попытался отправить SparkPi
в примере:
$ ./create.sh
{
"action" : "CreateSubmissionResponse",
"message" : "Driver successfully submitted as driver-20211212044718-0003",
"serverSparkVersion" : "3.1.2",
"submissionId" : "driver-20211212044718-0003",
"success" : true
}
$ ./status.sh driver-20211212044718-0003
{
"action" : "SubmissionStatusResponse",
"driverState" : "SUBMITTED",
"serverSparkVersion" : "3.1.2",
"submissionId" : "driver-20211212044718-0003",
"success" : true
}
create.sh
:
curl -X POST http://172.17.197.143:6066/v1/submissions/create --header "Content-Type:application/json;charset=UTF-8" --data '{
"appResource": "/home/ruc/spark-3.1.2/examples/jars/spark-examples_2.12-3.1.2.jar",
"sparkProperties": {
"spark.master": "spark://172.17.197.143:7077",
"spark.driver.memory": "1g",
"spark.driver.cores": "1",
"spark.app.name": "REST API - PI",
"spark.jars": "/home/ruc/spark-3.1.2/examples/jars/spark-examples_2.12-3.1.2.jar",
"spark.driver.supervise": "true"
},
"clientSparkVersion": "3.1.2",
"mainClass": "org.apache.spark.examples.SparkPi",
"action": "CreateSubmissionRequest",
"environmentVariables": {
"SPARK_ENV_LOADED": "1"
},
"appArgs": [
"400"
]
}'
status.sh
:
export DRIVER_ID=$1
curl http://172.17.197.143:6066/v1/submissions/status/$DRIVER_ID
Но когда я пытаюсь получить статус задания (даже через несколько минут), я получаю «ОТПРАВЛЕНО», а не «ЗАПУЩЕНО» или «ЗАВЕРШЕНО».
Затем я просмотрел журнал и обнаружил, что
21/12/12 04:47:18 INFO master.Master: Driver submitted org.apache.spark.deploy.worker.DriverWrapper
21/12/12 04:47:18 WARN master.Master: Driver driver-20211212044718-0003 requires more resource than any of Workers could have.
# ...
21/12/12 04:49:02 WARN master.Master: Driver driver-20211212044718-0003 requires more resource than any of Workers could have.
Однако, по-моему spark-env.sh
, у меня есть
export SPARK_WORKER_MEMORY=10g
export SPARK_WORKER_CORES=2
Я понятия не имею, что произошло. Как я могу заставить его работать нормально?
Комментарии:
1. Убедитесь, что у вас есть 10 ГБ памяти в качестве spark-env.sh , и попытайтесь уменьшить appArgs с 400 до 10. похоже, у вас нет ресурсов для запуска приложения.
2. @Yassine Abdul-Rahman
/proc/meminfo
показывает, что у меня есть как минимум 4 ГБ свободной памяти, затем я меняю spark-env.sh до 1 г и уменьшите количество порций до 10. Но это все равно не работает.3. Если у этого сервера spark есть пользовательский интерфейс, не могли бы вы перейти на вкладку исполнители и проверить, правильно ли созданы драйверы и рабочие с достаточным количеством потоков для обработки?
Ответ №1:
Поскольку вы проверили ресурсы, и у вас их достаточно. Это может быть проблема с сетью. возможно, исполнитель не может подключиться обратно к программе драйвера. Разрешить трафик как для master, так и для workers.
Комментарии:
1. Я не думаю, что это так, потому что все работает хорошо, когда я отправляю
spark-submit
через терминал.2. Более того, я проверил
$SPARK_HOME/logs
и обнаружил, что только в главном журнале есть что-то об этом драйвере, и ни один из рабочих журналов не был изменен.3. Хорошо, оказывается, что вы в некотором роде правы. Несколько месяцев назад кто-то открыл spark непосредственно с помощью java, который занимал порт 7077. Я не находил этого, пока не упомянул, что spark UI все еще работал даже после того, как я закрыл spark.