我正在尝试在 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
对调试上述错误和回答我的后续问题的任何帮助都非常感谢。
最佳答案
spark.kubernetes.container.image 应该是包含 spark 二进制文件和应用程序代码的图像。就我而言,因为我无法从我的节点访问互联网。执行以下操作让 spark 驱动程序选择正确的 jar。
所以,这就是我所做的,
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
然后我提交spark作业如下,
./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
关于apache-spark - Spark on K8 的问题加载 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55423346/