我试图在kubernetes上运行一个示例spark应用程序(在spark示例jar中提供),并试图了解其行为。在这个过程中,我做了以下事情,
./bin/spark-submit --master k8s://https://test-k8:6443 \
--deploy-mode cluster \
--name spark-pi \
--class org.apache.spark.examples.SparkPi \
--conf spark.executor.instances=5 \
--conf spark.kubernetes.container.image=gcr.io/cloud-solutions-images/spark:v2.3.0-gcs \
--conf spark.kubernetes.driver.pod.name=spark-pi-driver \
--conf spark.kubernetes.container.image.pullPolicy=IfNotPresent \
local:///opt/spark/examples/jars/spark-examples_2.11-2.3.3.jar
但是,它失败并显示以下错误,
Error: Could not find or load main class org.apache.spark.examples.SparkPi
关于上述问题,我有以下问题:
--conf spark.kubernetes.container.image=gcr.io/cloud-solutions-images/spark:v2.3.0-gcs
在调试上述错误并回答我的后续问题方面的任何帮助都很感激。
答案 0 :(得分:0)
spark.kubernetes.container.image应该是同时包含火花二进制文件和应用程序代码的图像。就我而言,因为我无法从节点访问互联网。执行以下操作,让火花驱动程序选择正确的罐子。
所以,这就是我所做的
docker build -t spark_pi_test:v1.0 -f kubernetes/dockerfiles/spark/Dockerfile .
上面在我的本地计算机上为我构建了一个docker映像。
docker save spark_pi_test:v1.0 > spark_pi_test_v1.0.tar
docker load < spark_pi_test_v1.0.tar
然后我按如下所示提交了火花作业,
./bin/spark-submit --master k8s://https://test-k8:6443 --deploy-mode cluster --name spark-pi --class org.apache.spark.examples.SparkPi --conf spark.executor.instances=5 --conf spark.kubernetes.container.image=spark_pi_test:v1.0 --conf spark.kubernetes.driver.pod.name=spark-pi-driver --conf spark.kubernetes.container.image.pullPolicy=IfNotPresent local:///opt/spark/examples/jars/spark-examples_2.11-2.3.3.jar 100000
上面的jar路径是docker容器中的路径。 要参考DockerFile, https://github.com/apache/spark/blob/master/resource-managers/kubernetes/docker/src/main/dockerfiles/spark/Dockerfile