【问题标题】:How to run Spark standalone on Kubernetes?如何在 Kubernetes 上独立运行 Spark?
【发布时间】:2017-11-29 14:09:57
【问题描述】:

我有一个在独立模式下使用 Spark 2.1 的 Scala 应用程序。该应用程序将运行 2 小时并完成。它应该每月运行一次。

我发现了几种结合 Spark 和 Kubernetes 的方法:

  1. 使用 Apache Spark Helm 图表:https://github.com/kubernetes/charts/tree/master/stable/spark
  2. Spark for Kubernetes 有一个特殊的分支:https://github.com/apache-spark-on-k8s/spark
  3. 构建我自己的应用程序 Docker 映像,包括 Spark 二进制文件:http://blog.madhukaraphatak.com/scaling-spark-with-kubernetes-part-5/ 代码示例:https://github.com/phatak-dev/kubernetes-spark

大部分文档都描述了如何在 Kubernetes 上运行 Spark 集群。在 Kubernetes 上独立运行 Spark 的方法是什么?

【问题讨论】:

  • “什么是最好的方法” - 它是基于主要意见的。然而,第二个选项在 Spark Jira 中有官方票,可能会集成到 Spark 中
  • 谢谢。我确实觉得 Spark for Kubernetes 的特殊分支的目的是在不运行 Mesos 的情况下运行 Spark 集群。
  • 我想你的意思是 - “不运行独立”。那是正确的。特殊分支用于直接在 Kubernetes 上运行 Spark。详情在 JIRA 和github.com/kubernetes/kubernetes/issues/34377

标签: scala apache-spark kubernetes


【解决方案1】:

对于 Kubernetes 上的独立 spark,存在的两个规范样本是:

  1. https://github.com/kubernetes/charts/tree/master/stable/spark
  2. https://github.com/kubernetes/examples/tree/master/staging/spark

这些当前运行的是过时的 Spark 版本,需要更新到 2.1,很快就会更新到 2.2。 (欢迎 PR :))。

https://github.com/apache-spark-on-k8s/spark 分支不是用于独立模式,而是旨在使 Spark 能够直接在 Kubernetes 集群上启动。它最终将被合并到上游火花中。如果您想使用它,文档是here

到目前为止,如果你想使用 Spark 2.1,选项是:编译你自己的镜像,或者使用 apache-spark-on-k8s 中的 spark 分发打包你的应用程序

【讨论】:

  • 感谢阿尼鲁德的回复。我正在尝试制作一个最小的解决方案,将 Spark 安装在 Pod 上,而没有运行/恶魔 Spark 主服务器和 Spark 工作人员。所以我不愿意使用 Helm,因为那是解决建立一个完整的工作系统的问题。
【解决方案2】:

我首先尝试了最简单的想法:方法3:

为我的应用程序构建我自己的 Docker 映像,包括 Spark 二进制文件:http://blog.madhukaraphatak.com/scaling-spark-with-kubernetes-part-5/

代码示例:https://github.com/phatak-dev/kubernetes-spark

效果很好。

【讨论】:

    【解决方案3】:

    查看我的https://github.com/radanalyticsio/spark-operator

    它在 Kubernetes 和 OpenShift 上部署了独立的 spark,还支持 spark-on-k8s 原生调度程序。默认 Spark 版本为 2.4.0

    您可以在项目的自述文件中找到非常快速的入门,但是这里有一种使用操作符部署 Spark 集群的方法:

    # create operator
    kubectl apply -f https://raw.githubusercontent.com/radanalyticsio/spark-operator/master/manifest/operator.yaml
    
    # create cluster
    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: SparkCluster
    metadata:
      name: my-cluster
    spec:
      worker:
        instances: "2"
    EOF
    

    【讨论】:

    • 哇,为什么要反对并标记删除?这完全是主题。
    猜你喜欢
    • 2018-02-27
    • 2016-08-03
    • 2014-01-23
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    相关资源
    最近更新 更多