通过在 k8s 中的主 pod 上执行 exec 来提交作业
spark-submit job by doing exec on a master pod in k8s
我已经在 kubernetes 上成功创建了 spark 集群,其中有 1 个 master 和 2 个 worker pods。 k8s 上的 spark v2.4.3 运行 Java 8 和 scala 2.11.12 以及 kubectl v1.16.0 和 minikube v1.4.0。
详细 kubectl get pods
显示此 -
NAME READY STATUS RESTARTS AGE
spark-master-fcfd55d7d-qrpsw 1/1 Running 0 66m
spark-worker-686bd57b5d-6s9zb 1/1 Running 0 65m
spark-worker-686bd57b5d-wrqrd 1/1 Running 0 65m
我还可以 运行 通过 exec
ing master pod 内置 spark 应用程序,例如 pyspark
和 spark-shell
-
kubectl exec spark-master-fcfd55d7d-qrpsw -it spark-shell`
因为我已经有足够的环境,所以我正在尝试 运行 我的 spark 工作像上面一样。但它不起作用。 spark 提交命令如下所示。
#!/usr/bin/env bash
spark-submit \
--class com.cloudian.spark.main.RequestInfoLogStreamer \
/Users/atekade/IdeaProjects/scala-spark-streaming/target/scala-2.11/scala-spark-streaming_2.11-1.0.jar
然后 .sh
脚本被提交给 master pod -
kubectl exec spark-master-fcfd55d7d-qrpsw /Users/atekade/IdeaProjects/scala-spark-streaming/logstreamer.sh
但这给我错误 -
OCI runtime exec failed: exec failed: container_linux.go:345: starting container process caused "exec: \"/Users/atekade/IdeaProjects/scala-spark-streaming/logstreamer.sh\": stat /Users/atekade/IdeaProjects/scala-spark-streaming/logstreamer.sh: no such file or directory": unknown
command terminated with exit code 126
我在这里做错了什么?我的意图是让这些主节点和工作节点完成工作。
从错误中可以看出:
OCI runtime exec failed: exec failed: container_linux.go:345: starting container process caused "exec: \"/Users/atekade/IdeaProjects/scala-spark-streaming/logstreamer.sh\": stat /Users/atekade/IdeaProjects/scala-spark-streaming/logstreamer.sh: no such file or directory": unknown
command terminated with exit code 126
我们最感兴趣的是 /Users/atekade/IdeaProjects/scala-spark-streaming/logstreamer.sh: no such file or directory
部分,这意味着 pod 无法找到 logstreamer.sh
文件。
脚本 logstreamer.sh
需要上传到 spark-master
pod。
scala-spark-streaming_2.11-1.0.jar
也需要在那里。
您可以配置一个 PersistenVolume for Storage,这将很有用,因为如果您的 pod 将被重新安排,则所有未存储在 PV 上的数据都将丢失。
这是持久卷的 link 到 minikube documentation。
您也可以使用不同的 Storage Classes。
我已经在 kubernetes 上成功创建了 spark 集群,其中有 1 个 master 和 2 个 worker pods。 k8s 上的 spark v2.4.3 运行 Java 8 和 scala 2.11.12 以及 kubectl v1.16.0 和 minikube v1.4.0。
详细 kubectl get pods
显示此 -
NAME READY STATUS RESTARTS AGE
spark-master-fcfd55d7d-qrpsw 1/1 Running 0 66m
spark-worker-686bd57b5d-6s9zb 1/1 Running 0 65m
spark-worker-686bd57b5d-wrqrd 1/1 Running 0 65m
我还可以 运行 通过 exec
ing master pod 内置 spark 应用程序,例如 pyspark
和 spark-shell
-
kubectl exec spark-master-fcfd55d7d-qrpsw -it spark-shell`
因为我已经有足够的环境,所以我正在尝试 运行 我的 spark 工作像上面一样。但它不起作用。 spark 提交命令如下所示。
#!/usr/bin/env bash
spark-submit \
--class com.cloudian.spark.main.RequestInfoLogStreamer \
/Users/atekade/IdeaProjects/scala-spark-streaming/target/scala-2.11/scala-spark-streaming_2.11-1.0.jar
然后 .sh
脚本被提交给 master pod -
kubectl exec spark-master-fcfd55d7d-qrpsw /Users/atekade/IdeaProjects/scala-spark-streaming/logstreamer.sh
但这给我错误 -
OCI runtime exec failed: exec failed: container_linux.go:345: starting container process caused "exec: \"/Users/atekade/IdeaProjects/scala-spark-streaming/logstreamer.sh\": stat /Users/atekade/IdeaProjects/scala-spark-streaming/logstreamer.sh: no such file or directory": unknown
command terminated with exit code 126
我在这里做错了什么?我的意图是让这些主节点和工作节点完成工作。
从错误中可以看出:
OCI runtime exec failed: exec failed: container_linux.go:345: starting container process caused "exec: \"/Users/atekade/IdeaProjects/scala-spark-streaming/logstreamer.sh\": stat /Users/atekade/IdeaProjects/scala-spark-streaming/logstreamer.sh: no such file or directory": unknown command terminated with exit code 126
我们最感兴趣的是 /Users/atekade/IdeaProjects/scala-spark-streaming/logstreamer.sh: no such file or directory
部分,这意味着 pod 无法找到 logstreamer.sh
文件。
脚本 logstreamer.sh
需要上传到 spark-master
pod。
scala-spark-streaming_2.11-1.0.jar
也需要在那里。
您可以配置一个 PersistenVolume for Storage,这将很有用,因为如果您的 pod 将被重新安排,则所有未存储在 PV 上的数据都将丢失。
这是持久卷的 link 到 minikube documentation。
您也可以使用不同的 Storage Classes。