通过在 K8s 中的主 Pod 上执行 exec 来激发提交作业



我已经成功地在 kubernetes 上创建了具有 1 个主节点和 2 个工作线程 pod 的 Spark 集群。在 k8s 上运行的 Spark v2.4.3 和 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主 pod 来运行内置的 Spark 应用程序,例如pysparkspark-shell-

kubectl exec spark-master-fcfd55d7d-qrpsw -it spark-shell` 

由于我已经有足够的环境,我正在尝试像上面一样运行我的火花作业。但它不起作用。火花提交命令如下所示。

#!/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脚本提交到主 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 运行时执行失败:执行失败:container_linux.go:345:启动容器进程导致"exec:\"/Users/atekade/IdeaProjects/scala-spark-streaming/logstreamer

.sh\":stat/Users/atekade/IdeaProjects/scala-spark-streaming/logstreamer.sh:没有这样的文件或目录":未知 命令以退出代码 126 终止

我们最感兴趣的是 部分/Users/atekade/IdeaProjects/scala-spark-streaming/logstreamer.sh: no such file or directory,这意味着 pod 无法找到logstreamer.sh文件。

需要将脚本logstreamer.sh上传到spark-master容器。 此外,scala-spark-streaming_2.11-1.0.jar也需要在那里。

您可以配置用于存储的持久卷,这将非常有用,因为如果您的 Pod 将被重新调度,则所有未存储在 PV 上的数据都将丢失。

这是指向持久卷的minikube文档的链接。

您还可以使用不同的存储类。

最新更新