【问题标题】:Spark Job SUBMITTED but not RUNNING after submit via REST API通过 REST API 提交后 Spark 作业已提交但未运行
【发布时间】:2021-12-13 05:54:34
【问题描述】:

按照this website 中的说明,我正在尝试通过 REST API /v1/submissions 向 Spark 提交作业。

我尝试在示例中提交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

我不知道发生了什么。怎样才能让它正常运行?

【问题讨论】:

  • 确保您有 10G 内存作为 spark-env.sh,并尝试将 appArgs 从 400 减少到 10。看来您没有资源来运行应用程序。
  • @Yassine Abdul-Rahman /proc/meminfo 表明我至少有 4GB 的可用内存,然后我将 spark-env.sh 更改为 1g 并将 appArgs 减少到 10。但它仍然没有工作。
  • 如果这个 spark server 有一个 UI,你能不能去 executors 选项卡检查驱动程序和 worker 是否正确产生了足够的线程来处理?

标签: rest apache-spark


【解决方案1】:

既然你已经检查了资源并且你有足够的。可能是网络问题。执行程序可能无法连接回驱动程序。允许 master 和 worker 上的流量。

【讨论】:

  • 我不认为是这样,因为当我在终端中通过spark-submit 提交时一切正常。
  • 还有,我查了$SPARK_HOME/logs,发现只有master日志有这个驱动的内容,worker日志都没有被修改过。
  • 好吧,事实证明你在某些方面是对的。几个月前有人直接用java打开了一个spark,占用了7077端口。直到我提到spark UI关闭spark后仍然可以工作,我才发现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多