在 Spark 2.1.0 上使用 python3 在 Zeppelin 中使用 pyspark

Using pyspark in Zeppelin with python3 on Spark 2.1.0

我正在尝试 运行 Zeppelin 中的 pyspark 和 python3 (3.5) 针对 Spark 2.1.0。我已经启动了 pyspark shell 和 运行 python3 但是转到连接到同一个本地集群的 Zeppelin 会得到:

Exception: Python in worker has different version 3.5 than that in driver 2.7, PySpark cannot run with different minor versions

我修改了默认的 spark-env.sh 如下:(为简洁起见省略了未修改的行)

SPARK_LOCAL_IP=127.0.0.1
SPARK_MASTER_HOST="localhost"
SPARK_MASTER_WEBUI_PORT=8080
SPARK_MASTER_PORT=7077
SPARK_DAEMON_JAVA_OPTS="-Djava.net.preferIPv4Stack=true"
export PYSPARK_PYTHON=/Library/Frameworks/Python.framework/Versions/3.5/bin/python3
export PYSPARK_DRIVER_PYTHON=/Library/Frameworks/Python.framework/Versions/3.5/bin/ipython

抬头 ./bin/pyspark shell。

一切都很好

Zeppelin 配置已在 zeppelin-site.xml 中进行了修改,仅将 ui 端口从 8080 移至 8666。`zeppelin-env.sh' 已修改如下:(仅显示 mods/additions)

export MASTER=spark://127.0.0.1:7077
export SPARK_APP_NAME=my_zeppelin-mf
export PYSPARK_PYTHON=/Library/Frameworks/Python.framework/Versions/3.5/bin/python3
export PYSPARK_DRIVER_PYTHON=/Library/Frameworks/Python.framework/Versions/3.5/bin/ipython
export PYTHONPATH=/Library/Frameworks/Python.framework/Versions/3.5/bin/python3

我试过使用 Anaconda,但 python 3.6 目前在使用 Spark 时出现问题。另外,我已经使用了上述配置设置的一堆组合 w/o 成功。

配置 zeppelin.pyspark.python 中引用了一个设置,默认为 python,但文档 how/where 不清楚如何将其调整为 python3。为了帮助消除 OSX 细节,我也能够在 LinuxMint 18.1 上重现此故障。

所以我一直在浏览 Zeppelin 文档和互联网,试图找到正确的配置设置以使 Zeppelin 成为 运行 作为 3.5 驱动程序。希望我遗漏了一些明显的东西,但我似乎无法找到这个。希望有人成功地完成了这项工作,可以帮助找出我的错误。

谢谢。

自然地,在发布这个之后有些东西就起作用了...

在 ./conf/interpreter.json 的 Zeppelin 配置中,我找到了我的一个笔记本的配置:

 "properties": {
    ...
    "zeppelin.pyspark.python": "python",
    ... 
 }

将其更改为:

 "properties": {
    ...
    "zeppelin.pyspark.python": "python3",
    ... 
 }

(Combined with the same settings as above)

已达到让笔记本与 python 3.5 一起工作的预期效果。然而,这似乎有点 clunky/hacky,我怀疑有更优雅的方法来做到这一点。所以我不会将其称为 solution/answer,而是更多的解决方法。

通过 Zeppelin UI 设置 %pyspark 解释器使用 python 3 的正确方法如下(在 apache/zeppelin docker 容器上测试).

  1. 点击您的用户菜单
  2. 单击 Interpreter 菜单项
  3. 搜索 spark 口译员
  4. zeppelin.pyspark.python 配置 属性 设置为 python3
  5. 点击Save
  6. 点击右上角的Restart重启解释器

您现在可以检查 python 打开笔记本并 运行 执行以下代码的版本:

%pyspark
import sys
sys.version_info

你应该看到这样的输出

sys.version_info(major=3, minor=5, micro=2, releaselevel='final', serial=0)

您还必须像这样将 PYSPARK_PYTHON 和 PYSPARK_PYTHON_DRIVER 设置为 python3(示例使用 apache/zeppelin docker 容器,假设 zeppelin 作为容器名称):

docker exec -it zeppelin bash
cd /zeppelin/conf
cp zeppelin-env.sh.template zeppelin-env.sh
cat <<EOF >> zeppelin-env.sh
export PYSPARK_PYTHON=python3
export PYSPARK_DRIVER_PYTHON=python3
EOF
# Now, press Ctrl+d to exit the container
docker restart zeppelin

现在所有内容都已设置为 运行 pyspark python3

如果您使用 HDP 沙箱,另请参阅

https://community.hortonworks.com/content/supportkb/146508/how-to-use-alternate-python-version-for-spark-in-z.html

如果相应调整,也可能适用于 Python 3:

The following steps are for Python 2.7.14 version:

Download and Install Python 2.7.14 in /usr/local/Python-2.7.14:
    # wget http://python.org/ftp/python/2.7.14/Python-2.7.14.tar.bz2
    # tar xvf Python-2.7.14.tar.bz2
    # chown –R root:root Python-2.7.14
    # cd Python-2.7.14
    # ./configure
    # make altinstall prefix=/usr/local/Python-2.7.14 exec-prefix=/usr/local/Python-2.7.14
Add following values in spark-env template under advanced spark-env section of Spark configuration in Ambari UI and restart Spark:
    export PYSPARK_PYTHON=/usr/local/Python-2.7.14/bin/python2.7
    export PYSPARK_DRIVER_PYTHON=/usr/local/Python-2.7.14/bin/python2.7
    export SPARK_YARN_USER_ENV="PYSPARK_PYTHON=/usr/local/Python-2.7.14/bin/python2.7”
Change the following value in Spark Interpreter configuration in Zeppelin, save and restart the Interpreter:
    zeppelin.pyspark.python = /usr/local/Python-2.7.14/bin/python2.7 (Default value is python)
Add and execute the following in notebook for validation:

    %spark.pyspark
    import sys
    print (sys.version)

The following should be the output from above notebook:

    2.7.14 (default, Oct 4 2017, 09:43:59)
    [GCC 4.4.7 20120313 (Red Hat 4.4.7-18)]