apache-spark - Spark on K8 的问题加载 jar

标签 apache-spark kubernetes

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

  • 构建了一个运行中的 Kubernetes 集群,其中包含 3 个节点(1 个主节点和 2 个子节点)以及足够的资源(10 个内核、64Gigs 内存、500GB 磁盘)。请注意,我的节点上没有 Internet 访问权限。
  • 安装的 Spark 发行版 - spark-2.3.3-bin-hadoop2.7
  • 由于节点上没有 Internet 访问权限,我将 spark 镜像(来自 gcr.io/cloud-solutions-images/spark:v2.3.0-gcs)预加载到运行 kubernetes master
  • 的节点上的 docker 中
  • 运行 spark-submit 到 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
    

    关于上述问题,我有以下问题:
  • 我们是否需要为 Kubernetes 提供 spark 的分发?这就是我们正在做的吗?
  • --conf spark.kubernetes.container.image=gcr.io/cloud-solutions-images/spark:v2.3.0-gcs
    
    
  • 如果我有自己的 spark 示例,例如处理来自 Kafka 的事件。我的方法应该是什么?

  • 对调试上述错误和回答我的后续问题的任何帮助都非常感谢。

    最佳答案

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

    所以,这就是我所做的,

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

    上面在我的本地计算机中为我构建了一个 docker 镜像。
  • tar'd 构建的 docker 镜像,
  • docker save spark_pi_test:v1.0 > spark_pi_test_v1.0.tar
    
  • scp 将 tar 球发送到所有 3 个 kube 节点。
  • docker 在所有 3 个 kube 节点上加载 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/

    相关文章:

    scala - Hadoop 中的快速递归文件夹删除

    scala - 卡夫卡+ Spark 流: Multi topic processing in single job

    annotations - Kubernetes/Prometheus - 无法在服务文件中注释

    elasticsearch - 如何激活和配置 ElasticSearch Kafka Connect 接收器?

    web - 通过 websocket 将 kubernetes 日志暴露给浏览器

    docker - 无法从本地 docker 注册表推/拉

    Scala/Spark 无法匹配函数

    scala - Spark : How to join two `Dataset` s A and B with the condition that an ID array column of A does NOT contain the ID column of B?

    hadoop - 哪个更适合做日志分析

    kubernetes - 如何在kubernetes中调整kubectl get pod的输出以查看pod状态