我已经成功地在 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 应用程序,例如pyspark
和spark-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文档的链接。
您还可以使用不同的存储类。