如何在Kubernetes上单独运行Spark?

3
我有一个使用Spark 2.1独立模式的Scala应用程序。该应用程序将运行2小时并完成。它应该每月运行一次。
我找到了几种结合Spark和Kubernetes的方法:
  1. 使用Apache Spark Helm Chart:https://github.com/kubernetes/charts/tree/master/stable/spark
  2. 有一个专门针对Kubernetes的Spark分支: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独立模式的方法是什么?

1
“最佳方法是什么” - 这是基于个人意见的。然而,第二个选项在Spark Jira中有官方票据,可以集成到Spark中。 - T. Gawęda
我确实有这样的印象,即Spark针对Kubernetes的特殊分支的目的是在不运行Mesos的情况下运行Spark集群。 - Sami Badawi
我认为你的意思是“不运行独立应用程序”。没错吧?这个特殊分支是为了直接在Kubernetes上运行Spark而设计的。详细信息请参见JIRA和https://github.com/kubernetes/kubernetes/issues/34377。 - Anirudh Ramanathan
3个回答

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集群上启动。它最终将合并到upstream spark中。如果您希望使用它,文档在此处
截至目前,如果要使用Spark 2.1,选项是:编译自己的映像或在apache-spark-on-k8s中打包应用程序与spark发行版一起使用。

谢谢回复,Anirudh。 我正在尝试制作一个最小化的解决方案,只需在 Pod 上安装 Spark,而不需要运行/守护进程 Spark master 和 Spark workers。 因此,我不愿使用 Helm,因为它解决了设置完整工作系统的问题。 - Sami Badawi

1

1

请查看我的 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

哇,为什么要给我点踩并标记删除?这完全是相关话题。 - Jiri Kremser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接