docker - Zeppelin 与 Kubernetes。在非本地模式的解释器设置中未指定 SPARK_HOME
问题描述
我在 Kubernetes 集群(Minikube)中有一个 Spark 集群(Master + 2 Workers)。
我想在我的 k8s 集群中添加 Zeppelin 并将其配置为使用我的 Spark 集群。
因此,我尝试使用来自 apache/zeppelin 的 Zeppelin 0.8.1 图像或基于 Zeppelin 0.9.0-SNAPSHOT 构建的另一个图像(仍在开发中)
我遵循了Zeppelin 官方文档(至少需要 Zeppelin 0.9.0,即使它尚未发布¯\_(ツ)_/¯ )
我做了什么 :
- 拉取 Zeppelin docker 镜像
- 构建 Spark docker 镜像
- 从文档中下载 zeppelin-server.yaml
- 编辑它,使他有正确的路径到我的本地 Spark 图像和 Zeppelin 图像
- kubectl apply -f (spark & zeppelin yaml 文件)
然后我浏览我的 Zeppelin Notebook,并尝试运行一个小火花测试,看看它是否有效,但我收到以下错误:
java.lang.RuntimeException: SPARK_HOME is not specified in interpreter-setting for non-local mode, if you specify it in zeppelin-env.sh, please move that into interpreter setting
at org.apache.zeppelin.interpreter.launcher.SparkInterpreterLauncher.setupPropertiesForSparkR(SparkInterpreterLauncher.java:181)
at org.apache.zeppelin.interpreter.launcher.SparkInterpreterLauncher.buildEnvFromProperties(SparkInterpreterLauncher.java:63)
at org.apache.zeppelin.interpreter.launcher.StandardInterpreterLauncher.launch(StandardInterpreterLauncher.java:86)
at org.apache.zeppelin.interpreter.InterpreterSetting.createInterpreterProcess(InterpreterSetting.java:698)
at org.apache.zeppelin.interpreter.ManagedInterpreterGroup.getOrCreateInterpreterProcess(ManagedInterpreterGroup.java:63)
at org.apache.zeppelin.interpreter.remote.RemoteInterpreter.getOrCreateInterpreterProcess(RemoteInterpreter.java:110)
at org.apache.zeppelin.interpreter.remote.RemoteInterpreter.internal_create(RemoteInterpreter.java:163)
at org.apache.zeppelin.interpreter.remote.RemoteInterpreter.open(RemoteInterpreter.java:131)
at org.apache.zeppelin.interpreter.remote.RemoteInterpreter.getFormType(RemoteInterpreter.java:290)
at org.apache.zeppelin.notebook.Paragraph.jobRun(Paragraph.java:402)
at org.apache.zeppelin.notebook.Paragraph.jobRun(Paragraph.java:75)
at org.apache.zeppelin.scheduler.Job.run(Job.java:172)
at org.apache.zeppelin.scheduler.AbstractScheduler.runJob(AbstractScheduler.java:121)
at org.apache.zeppelin.scheduler.RemoteScheduler$JobRunner.run(RemoteScheduler.java:187)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
首先,我看到错误来自函数setupPropertiesForSparkR()
,即使我不使用 Spark R。
但我迷失的主要问题是,由于我使用 Zeppelin 和 Spark docker 图像,我不知道如何设置我的 SPARK_HOME 以及它应该具有什么值。
备注:
- 我使用 Spark 2.4.0
- 我也尝试手动构建 Zeppelin 映像,但使用正在开发的源,构建失败)
解决方案
您可以使用以下方式配置环境变量:
docker run --env SPARK_HOME=/path ...
您还可以使用 Spark 集群创建卷
docker run --env SPARK_HOME=/pathInCluster -v /pathYourSparkCluster:/pathInCluster ...
推荐阅读
- symfony - 在奏鸣曲管理列表视图中呈现表单
- maven - 带有 mvn 测试的错误 Maven
- oracle - 减少 pl/sql 的过载
- postgresql - 一次更新多行(postgres)
- apache-kafka - kafka 消费者无法获取之前未消费的事件
- python - 树数据结构中的Python递归对象引用
- vba - 选择单元格中的所有形状
- spring-boot - 具有多个路由键的 Spring Boot 流绑定队列
- amazon-web-services - 凭证应限定范围以纠正服务错误 - AWS IOT
- php - SQL Server 2016 的 SSRS PHP SDK 是否有任何更新?