【发布时间】:2019-12-02 17:13:16
【问题描述】:
我有一个独立的集群,有 3 台机器(每台机器有 1 个工作节点),使用 PySpark。我正在运行的 Python 脚本是一个简单的转换,它从 Oracle 读取并写入 MongoDB。
DataFrame 在读取和写入时进行分区,以更好地使用并行化和多连接。
当我通过 /bin/spark-submit 提交我的 .py 脚本时,在 Spark UI (HOST:8080) 中,我可以看到它被作为应用程序 (app-NNNNNNNNNNNN-IP-NNNN) 处理。它显示在 UI 的“正在运行的应用程序”部分中,我可以看到工作节点中分配的工作、正确分配的 RAM 和核心总量。在 Oracle 会话中,我可以看到来自所有 3 个工作人员 IP 的多个连接工作正常,在 MongoDB 中也是如此。一切正常,正如预期的那样。
现在我正在尝试做同样的事情,但使用远程提交,并使用 REST API“http://HOST:6066/v1/submissions/create”。但在这种情况下,提交被作为驱动程序(Driver-NNNNNNNNNNNNN-NNNN)处理,并且仅在一个工作人员上运行(驱动程序运行的工作程序节点因提交而异)。在 master 的 UI 中,它位于“Running Drivers”部分。
有没有办法通过 REST API 作为应用程序提交,或者所有提交都被视为驱动程序?
这是我在服务器本身上运行时可以正常运行的命令:
./spark-submit --master spark://host:7077 --executor-memory 10G --total-executor-cores 20 path-to-my-py-script/my-py-script.py
这是我要发送到 REST API (http://host:6066/v1/submissions/create) 的消息
{
"action": "CreateSubmissionRequest",
"appArgs": [
"path-to-my-py-script/my-py-script.py"
],
"appResource": "path-to-my-py-script/my-py-script.py",
"clientSparkVersion": "2.3.0",
"environmentVariables": {
"SPARK_ENV_LOADED": "1"
},
"mainClass": "org.apache.spark.deploy.SparkSubmit",
"sparkProperties": {
"spark.executor.memory": "4G",
"spark.executor.cores": "10",
"spark.driver.supervise": "true",
"spark.ui.enabled": "true",
"spark.eventLog.enabled": "true",
"spark.submit.deployMode": "cluster",
"spark.app.name": "RemoteSubmitTest",
"spark.master": "spark://host:7077"
}
}
【问题讨论】:
标签: rest apache-spark pyspark bigdata cluster-computing