如果不将Anaconda库添加到%PATH,Zeppelin%python.conda和%python.sql解释器将无法工作

时间:2017-11-09 09:51:33

标签: python apache-spark pyspark apache-zeppelin

我有以下情况:我想将Anaconda3与Zeppelin和Spark一起使用。

我安装了以下组件:

  • HDP 2.5
  • Spark 2.0.0.x(HDP 2.5附带的版本)
  • Zeppelin 0.7.3
  • 使用Python 3.5.4的Anaconda3(Spark 2.0.0和Python 3.6中的PySpark不是朋友)
  • Python 2.7附带HDP 2.5,可在/ usr / bin中使用,此路径已添加到$ PATH

基本上我将Python解释器配置为指向我的anaconda版本,在我的情况下是/ opt / anaconda3 / bin / python,这是有效的。我还用:

编辑了zeppelin.sh脚本
export PYTHONPATH="${SPARK_HOME}/python:${SPARK_HOME}/python/lib/py4j-0.8.2.1-src.zip"
export SPARK_YARN_USER_ENV="PYTHONPATH=${PYTHONPATH}"
export PYSPARK_DRIVER_PYTHON="/var/opt/teradata/anaconda3/envs/py35/bin/ipython"
export PYSPARK_PYTHON="/var/opt/teradata/anaconda3/envs/py35/bin/python"
export PYLIB="/var/opt/teradata/anaconda3/envs/py35/lib"

直到这里一切都很好。

当我尝试%python.conda %python.sql 解释器时,它们失败了,因为找不到conda命令而pandas也没有找到。 我将库位置添加到 $ PATH 环境变量,Zeppelin能够找到这些命令,但副作用是,整个环境的默认Python版本变为 3.5 而不是 2.7 ,我开始得到另一个像这样的错误:

apache.zeppelin.interpreter.InterpreterException:   File "/usr/bin/hdp-select", line 205
    print "ERROR: Invalid package - " + name
                                    ^
SyntaxError: Missing parentheses in call to 'print'
ls: cannot access /usr/hdp//hadoop/lib: No such file or directory
Exception in thread "main" java.lang.IllegalStateException: hdp.version is not set while running Spark under HDP, please set through HDP_VERSION in spark-env.sh or add a java-opts file in conf with -Dhdp.version=xxx

当我从$ PATH切换回并擦除Python3库时,它再次起作用。

是否有任何最佳方式来配置我的环境,以使一切正常运行并使其易于管理和维护?

我正在考虑在/ var / lib中为需要找到的文件创建符号链接,但我不知道需要多少个,我不想为除python3之外的所有人创建链接。

任何评论都将受到高度赞赏。

亲切的问候,保罗

1 个答案:

答案 0 :(得分:3)

我遇到了同样的错误。经过调查,我追踪了错误来源here。看起来Zeppelin默认为" / bin / conda"对于conda的默认路径。

我能够通过执行以下操作来修复它:

  • 创建符号链接到/ bin / conda:ln -s /opt/anaconda3/bin/conda /bin/conda
  • 创建符号链接到/ bin / python:ln -s /opt/anaconda3/bin/python /bin/python
  • 在Python解释器的设置中,将zeppelin.python设置为/opt/anaconda3/bin/python3
  • 将/usr/lib/zeppelin/conf/zeppelin-env.sh中的PYTHONPATH设置为export PYTHONPATH=/opt/anaconda3/bin

看起来此行为here还存在JIRA问题。