Windows Spark集群REST API提交任务遇ERROR空指针异常求助
Windows Spark集群REST API提交Python任务报错排查与解决
我在Windows系统部署了Spark集群,尝试通过REST API提交一个简单的HelloWorld Python任务,代码如下:
from pyspark.sql import SparkSession def main(args): print('hello world') return 0 if __name__ == '__main__': main(None)
提交任务使用的URL为:http://<Master IP>:6066/v1/submissions/create
请求体如下:
{ "appResource": "file:../../helloworld.py", "sparkProperties": { "spark.executor.memory": "2g", "spark.master": "spark://<Master IP>:7077", "spark.app.name": "Spark REST API - Hello world", "spark.driver.memory": "2g", "spark.eventLog.enabled": "false", "spark.driver.cores": "2", "spark.submit.deployMode": "cluster", "spark.driver.supervise": "true" }, "clientSparkVersion": "3.3.1", "mainClass": "org.apache.spark.deploy.SparkSubmit", "environmentVariables": { "SPARK_ENV_LOADED": "1" }, "action": "CreateSubmissionRequest", "appArgs": [ "../../helloworld.py", "80" ] }
通过Postman发送请求后,得到成功提交的响应:
{ "action": "CreateSubmissionResponse", "message": "Driver successfully submitted as driver-20221216112633-0005", "serverSparkVersion": "3.3.1", "submissionId": "driver-20221216112633-0005", "success": true }
但查询任务状态(URL:http://<Master IP>:6066/v1/submissions/status/driver-20221216112633-0005)时,返回driverState为ERROR,出现NullPointerException:
{ "action": "SubmissionStatusResponse", "driverState": "ERROR", "message": "Exception from the cluster:\njava.lang.NullPointerException\n\torg.apache.spark.deploy.worker.DriverRunner.downloadUserJar(DriverRunner.scala:158)\n\torg.apache.spark.deploy.worker.DriverRunner.prepareAndRunDriver(DriverRunner.scala:179)\n\torg.apache.spark.deploy.worker.DriverRunner$$anon$2.run(DriverRunner.scala:99)", "serverSparkVersion": "3.3.1", "submissionId": "driver-20221216112633-0005", "success": true, "workerHostPort": "10.9.8.120:56060", "workerId": "worker-20221216093629-<IP>-56060" }
我原本预期这个简单的HelloWorld任务会处于RUNNING或FINISHED状态,不清楚错误原因及排查方向,特此求助。
2022-01-12 更新:
我已找到解决方案:需要确保appResource和spark.jars中指定的py/jar文件能被集群所有节点访问,比如使用网络共享路径:
{ "appResource": "file:////Servername/somefolder/HelloWorld.jar", ... "spark.jars": "file:////Servername/someFolder/HelloWorld.jar", ... }
希望能帮到其他人,同时想请教:为何提交任务到Master后,仍需所有节点都能访问该文件?
内容的提问来源于stack exchange,提问作者samsal77
相关产品推荐
相关产品推荐

