Spark Standalone + Zeppelin + Docker:如何设置 SPARK_HOME
Posted
技术标签:
【中文标题】Spark Standalone + Zeppelin + Docker:如何设置 SPARK_HOME【英文标题】:Spark Standalone + Zeppelin + Docker: how to set SPARK_HOME 【发布时间】:2019-12-27 04:54:15 【问题描述】:我使用this 脚本构建了一个 Spark 独立集群。
然后我想使用另一个容器中的 Zeppelin 将作业提交到该集群。
问题是当我尝试从 zeppelin 运行任何东西时,我得到一个异常:
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
如何在 Zeppelin 容器中设置 SPARK_HOME 变量?
问题是 Spark 在另一个容器中,我想知道我做的是否正确?
【问题讨论】:
【参考方案1】:构建镜像或者使用官方的zeppelin都是一样的,所以我只是使用官方的dockerhub镜像来举例说明:
$ docker run --rm apache/zeppelin:0.8.1 cat /zeppelin/conf/zeppelin-env.sh.template | grep SPARK_HOME
## defining SPARK_HOME makes Zeppelin run spark interpreter process using spark-submit
# export SPARK_HOME # (required) When it is defined, load it instead of Zeppelin embedded Spark libraries
## without SPARK_HOME defined, Zeppelin still able to run spark interpreter process using embedded spark binaries.
## however, it is not encouraged when you can define SPARK_HOME
从上面你可以看到,在这个配置文件中,你可以设置SPARK_HOME
,你现在唯一需要做的就是编写你自己的配置文件类似下一个:
zeppelin-env.sh:
#!/bin/bash
export SPARK_HOME=xxxxxx
然后,在运行时像next一样挂载到容器中启动容器,你可以根据你引用的文档添加其他参数:
docker run -idt -v $(pwd)/zeppelin-env.sh:/zeppelin/conf/zeppelin-env.sh apache/zeppelin:0.8.1
另外,我注意到你提到的文件中也告诉你这样做,见here
【讨论】:
我不太清楚 spark_home 工件在 zeppelin 容器上的安装位置... 其实我从来没用过zeppelin,但是我觉得zeppelin只是用spark-client和spark cluster通信,所以在host上安装spark,自己挂载到zeppelin容器就是这样。【参考方案2】:在您的 docker-compose.yaml 文件中,挂载您本地下载的 spark 卷。 即
zeppelin-notebook:
image: apache/zeppelin:0.10.0
ports:
- "3000:8080"
environment:
- LOCAL_IP=zeppelin-notebook
- SPARK_HOME=/opt/spark
volumes:
- ./zeppelin/notebooks:/zeppelin/notebook
- <path to your local spark folder>/spark-3.0.2-bin-hadoop3.2/:/opt/spark
执行docker-compose up
。
【讨论】:
以上是关于Spark Standalone + Zeppelin + Docker:如何设置 SPARK_HOME的主要内容,如果未能解决你的问题,请参考以下文章