齐柏林与Kubernetes。在解释器设置中未指定非本地模式的SPARK_HOME。

4
我有一个Spark集群(主节点+2个工作节点)在Kubernetes集群中(Minikube)。
我想在我的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笔记本,尝试运行一个小的Spark测试来查看它是否正常工作,但我收到以下错误:
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映像,但使用正在开发中的源代码,构建失败。
1个回答

0

您可以使用以下方式配置环境变量:

docker run --env SPARK_HOME=/path ...

此外,您还可以使用Spark集群创建卷

docker run --env SPARK_HOME=/pathInCluster -v /pathYourSparkCluster:/pathInCluster ...

1
我不确定对于“pathYourSparkCluster”需要理解什么。使用Apache Spark存储库(https://github.com/apache/spark/blob/master/resource-managers/kubernetes/docker/src/main/dockerfiles/spark/Dockerfile)中的Dockerfile,它应该是什么?而且,ENV SPARK_HOME /opt/spark这一行不是已经完成了工作吗? - Nakeuh
你需要指定SPARK_HOME,即Spark安装的位置。我了解到你的SPARK_HOME在zeppelin docker之外,你可以通过卷将Spark连接到Zeppelin。在你的Zeppelin Docker中,/opt/spark/存在并且有一个Spark安装吗? - Pablo López Gallego
没有在我的Zeppelin docker中找到/opt/spark,我认为Spark并未包含在Zeppelin docker中。实际上,是zeppelin-server.yaml(您可以在此处找到https://github.com/apache/zeppelin/blob/master/k8s/zeppelin-server.yaml)同时使用了Zeppelin镜像和Spark镜像。 - Nakeuh

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