【问题标题】:Using pyspark in Zeppelin with python3 on Spark 2.1.0在 Spark 2.1.0 上使用 Zeppelin 中的 pyspark 和 python3
【发布时间】:2017-07-04 05:38:11
【问题描述】:

我正在尝试在 Zeppelin 和 python3 (3.5) 中针对 Spark 2.1.0 运行 pyspark。我已经启动了 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,一切都很好。

zeppelin-site.xml 中的 Zeppelin 配置已被修改,仅将 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 产生问题。此外,我已经使用了上述配置设置的一堆组合,但没有成功。

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

  • 在 OSX 10.11.6 上本地运行
  • Spark 是 2.1.0-bin-hadoop2.7
  • Zeppelin 0.7.0-bin-all

因此,我一直在浏览 Zeppelin 文档和 Internet,试图找到正确的配置设置以使 Zeppelin 作为 3.5 驱动程序运行。希望我错过了一些明显的东西,但我似乎无法找到这个。希望有人成功地做到了这一点并且可以帮助识别我的错误。

谢谢。

【问题讨论】:

    标签: python-3.x apache-spark pyspark python-3.5 apache-zeppelin


    【解决方案1】:

    如果您使用 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)]
    

    【讨论】:

      【解决方案2】:

      通过 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
      

      现在一切都已设置为使用 python3 运行 pyspark

      【讨论】:

        【解决方案3】:

        当然,在发布此内容后,有些事情就奏效了……

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

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

        将其更改为:

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

        (Combined with the same settings as above)

        在 python 3.5 中使用 notebook 取得了预期的效果。但是,这似乎有点笨拙/笨拙,我怀疑有一种更优雅的方法可以做到这一点。因此,我不会将其称为解决方案/答案,而是更多的解决方法。

        【讨论】:

          猜你喜欢
          • 2017-05-25
          • 2017-06-12
          • 2017-07-14
          • 2020-07-27
          • 2017-03-19
          • 2020-09-01
          • 2021-07-08
          • 1970-01-01
          • 2017-05-09
          相关资源
          最近更新 更多