使用 zeppelin 在 kubernetes 上运行 Spark

Posted

技术标签:

【中文标题】使用 zeppelin 在 kubernetes 上运行 Spark【英文标题】:Spark on kubernetes with zeppelin 【发布时间】:2020-07-27 10:21:01 【问题描述】:

我正在按照本指南在使用 minikube 设置的本地 kubernetes 集群中运行 zeppelin 容器。

https://zeppelin.apache.org/docs/0.9.0-SNAPSHOT/quickstart/kubernetes.html

我能够设置 zeppelin 并在那里运行一些示例代码。我已经下载了 spark 2.4.5 和 2.4.0 源代码,并使用以下命令构建了它以支持 kubernetes:

./build/mvn -Pkubernetes -DskipTests clean package

一旦构建了 spark,我就按照文章中的说明创建了一个 docker 容器:

bin/docker-image-tool.sh -m -t 2.4.X build

我将 zeppelin 配置为使用基于 kubernetes 支持构建的 spark 映像。上面的文章解释了 spark 解释器会在 Kubernetes 上自动配置 spark 以在客户端模式下运行并运行作业。

但每当我尝试使用 spark 运行任何段落时,我都会收到以下错误

Exception in thread "main" java.lang.IllegalArgumentException: basedir must be absolute: ?/.ivy2/local

我尝试在 zeppelin 中将 spark 配置 spark.jars.ivy 设置为指向临时目录,但这也不起作用。

我在这里发现了一个类似的问题: basedir must be absolute: ?/.ivy2/local

但我似乎无法将 spark 配置为使用 spark.jars.ivy /tmp/.ivy 配置运行。在构建 spark 时,我尝试使用 spark-defaults.conf 构建 spark,但这似乎也不起作用。

对这个问题以及如何解决它感到非常困惑,任何指导将不胜感激。

谢谢!

【问题讨论】:

【参考方案1】:

我也遇到过这个问题,但我用于设置spark.jars.ivy=/tmp/.ivy 的解决方法是将其设置为环境变量。

在您的 spark 解释器设置中,添加以下属性:SPARK_SUBMIT_OPTIONS 并将其值设置为 --conf spark.jars.ivy=/tmp/.ivy

这应该会传递额外的选项来触发提交,您的工作应该会继续。

【讨论】:

以上是关于使用 zeppelin 在 kubernetes 上运行 Spark的主要内容,如果未能解决你的问题,请参考以下文章

Zeppelin+Spark+Kubernetes:让 Zeppelin Job 在现有的 Spark 集群上运行

Kubernetes Ingress 背后缺少 Zeppelin 笔记本和解释器

为啥 Zeppelin-Spark 解释器没有挂载 Kubernetes 服务帐户

Kubernetes 上的 Spark + Zeppelin

Kubernetes 上的 Zeppelin Spark Master 设置

Zeppelin 错误:部署到 Kubernetes 集群后出现“解释器进程未运行”