在K8的Issues loading jar上发火花

时间:2019-03-29 18:11:58

标签: apache-spark kubernetes

我试图在kubernetes上运行一个示例spark应用程序(在spark示例jar中提供),并试图了解其行为。在这个过程中,我做了以下事情,

  1. 构建一个具有3个节点(1个主节点和2个子节点)且具有足够资源(10个内核,64Gigs mem,500GB磁盘)的运行kubernetes集群。请注意,我的节点上没有Internet访问。
  2. 已安装的Spark发行版-spark-2.3.3-bin-hadoop2.7
  3. 由于节点上没有Internet访问,我将一个Spark映像(来自gcr.io/cloud-solutions-images/spark:v2.3.0-gcs)预加载到运行kubernetes master的节点上的docker
  4. 按以下方式将火花提交给k8,
./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

关于上述问题,我有以下问题:

  1. 我们是否需要为Kubernetes分发火花?那就是我们正在做什么?
--conf spark.kubernetes.container.image=gcr.io/cloud-solutions-images/spark:v2.3.0-gcs

  1. 如果我有自己的spark示例,例如处理来自Kafka的事件。我应该怎么办?

在调试上述错误并回答我的后续问题方面的任何帮助都很感激。

1 个答案:

答案 0 :(得分:0)

spark.kubernetes.container.image应该是同时包含火花二进制文件和应用程序代码的图像。就我而言,因为我无法从节点访问互联网。执行以下操作,让火花驱动程序选择正确的罐子。

所以,这就是我所做的

  1. 在本地计算机上,我做了一个docker构建
docker build -t spark_pi_test:v1.0 -f kubernetes/dockerfiles/spark/Dockerfile .

上面在我的本地计算机上为我构建了一个docker映像。

  1. 已构建的docker映像为tar,
docker save spark_pi_test:v1.0 > spark_pi_test_v1.0.tar
  1. 将tar球放到所有3个kube节点上。
  2. docker在所有3个kube节点上加载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