运行 Kubernetes 上的 Spark 示例失败

Run Spark example on Kubernetes failed

我使用以下命令启动 minikube,没有任何额外的配置。

minikube start --driver=virtualbox
--image-repository='registry.cn-hangzhou.aliyuncs.com/google_containers' --cpus 4 --memory 4096 --alsologtostderr

然后我从Spark官网下载了spark-2.4.5-bin-hadoop2.7,通过以下命令构建spark镜像

eval $(minikube docker-env)
./bin/docker-image-tool.sh -m -t 2.4.5 build

然后我 运行 Spark-pi 在存储 Spark 2.4.5 的本地机器中使用以下命令。


kubectl create serviceaccount spark
kubectl create clusterrolebinding spark-role --clusterrole=admin --serviceaccount=default:spark --namespace=default
./bin/spark-submit \
--master k8s://https://192.168.99.104:8443 \
--deploy-mode cluster \
--name spark-pi \
--class org.apache.spark.examples.SparkPi \
--conf spark.kubernetes.authenticate.driver.serviceAccountName=spark \
--conf spark.executor.instances=1 \
--conf spark.kubernetes.container.image=spark:2.4.5 \
local:///opt/spark/examples/jars/spark-examples_2.11-2.4.5.jar

我收到以下错误

可以在 full log

找到完整的日志

谁能解释这个错误以及如何解决它?

请检查您使用 Minikube 启动的 Kubernetes 版本。

Spark v2.4.5 fabric8 Kubernetes 客户端 v4.6.1 与 Kubernetes API 兼容 1.15.2(参考 )。

您可以通过在 minikube start 命令中添加 --kubernetes-version 标志来使用 Minikube 启动特定的 Kubernetes API 版本(参考 docs)。

这个问题也可能是由 问题的评论中描述的 OkHttp 库错误引起的。

另一个 spark 图像(来自 gcr.io/spark-operator/spark)对我有用,没有降级 Kubernetes 的版本。

bin/spark-submit \
--master k8s://https://192.168.99.100:8443 \
--deploy-mode cluster \
--name spark-pi \
--class org.apache.spark.examples.SparkPi \
--conf spark.driver.cores=1 \
--conf spark.driver.memory=512m \
--conf spark.executor.instances=2 \
--conf spark.executor.memory=512m \
--conf spark.executor.cores=1 \
--conf spark.kubernetes.container.image=gcr.io/spark-operator/spark:v2.4.5 \
--conf spark.kubernetes.container.image.pullPolicy=IfNotPresent \
--conf spark.kubernetes.authenticate.driver.serviceAccountName=spark \
local:///opt/spark/examples/jars/spark-examples_2.11-2.4.5.jar