【问题标题】:Connecting Jupyter notebook to Spark将 Jupyter 笔记本连接到 Spark
【发布时间】:2017-09-24 07:30:20
【问题描述】:

我有一台安装了 Hadoop 和 Spark 的机器。下面是我目前的环境。

python3.6

spark1.5.2

Hadoop 2.7.1.2.3.6.0-3796

我试图通过构建 ipython 内核来连接 jupyter notebook 以连接到 spark。

已写入 2 个新文件。

  1. /root/.ipython/profile_pyspark/ipython_notebook_config.py

  2. /root/.ipython/profile_pyspark/startup/00-pyspark-setup.py

  3. /root/anaconda3/share/jupyter/kernels/pyspark/kernel.json

kernel.json

{
    "display_name": "PySpark (Spark 2.0.0)",
    "language": "python",
    "argv": [
        "/root/anaconda3/bin/python3",
        "-m",
        "ipykernel",
        "--profile=pyspark"
    ],
    "env": {
        "CAPTURE_STANDARD_OUT": "true",
        "CAPTURE_STANDARD_ERR": "true",
        "SEND_EMPTY_OUTPUT": "false",
        "PYSPARK_PYTHON" : "/root/anaconda3/bin/python3",
        "SPARK_HOME": "/usr/hdp/current/spark-client/"
    }
}

00-pyspark-setup.py

import os
import sys
os.environ["PYSPARK_PYTHON"] = "/root/anaconda3/bin/python"
os.environ["SPARK_HOME"] = "/usr/hdp/current/spark-client"
os.environ["PYLIB"] = os.environ["SPARK_HOME"] + "/python/lib"
spark_home = os.environ.get('SPARK_HOME', None)
sys.path.insert(0, os.environ["PYLIB"] +"/py4j-0.8.2.1-src.zip")
sys.path.insert(0, os.environ["PYLIB"] +"/pyspark.zip")
exec(open(os.path.join(spark_home, 'python/pyspark/shell.py')).read())

ipython_notebook_config.py

c = get_config()
c.NotebookApp.port = 80

然后,当我运行以下内容时

jupyter notebook --profile=pyspark

笔记本运行良好。然后,我将内核更改为“PySpark (Spark 2.0.0)”,并假设使用“sc”火花上下文。但是,当我输入“sc”时,它什么也不显示。

所以,由于 sc 无法初始化,如果我想运行以下命令,它失败了!

nums = sc.parallelize(xrange(1000000))

谁能帮助我如何配置 jupyter notebook 以与 Spark 对话?

【问题讨论】:

  • 这里似乎发生了很多事情。尝试更多地关注您的问题/问题。我建议将您的 Spark 2.0 问题转移到另一个问题。

标签: apache-spark pyspark ipython-notebook jupyter ssh-tunnel


【解决方案1】:

仅供参考,直到版本 spark 2.1.1 才支持 python 3.6。见 JIRA https://issues.apache.org/jira/browse/SPARK-19019

【讨论】:

    【解决方案2】:

    您的问题有很多问题...

    1) 除了上面 Punskr 的回答之外 - Spark 1.5 only works with Python 2;在 Spark 2.0 中引入了 Python 3 支持。

    2) 即使切换到 Python 2 或upgrade Spark,仍然需要导入 Pyspark 的相关模块,并在 notebook 中手动初始化 sc 变量

    3) 您似乎也在使用旧版本的 Jupyter,因为配置文件功能在 Jupyter >= 4 中不可用。

    要在 Jupyter >=4 中“自动”初始化 sc,请参阅我的回答 here

    【讨论】:

      【解决方案3】:

      您可以对环境进行一些更改以使用 pyspark 默认 ipython 或 jupyter notebook。

      将以下内容放入您的~/.bashrc

      export PYSPARK_PYTHON=python3 ## for python3
      export PYSPARK_DRIVER_PYTHON=ipython
      export PYSPARK_DRIVER_PYTHON_OPTS="notebook --no-browser --port=7000"
      

      见:pyspark on GitHub

      接下来,运行source ~/.bashrc

      然后,当您启动 pyspark(或使用 YARN)时,它将打开一个服务器供您连接。

      在具有 ssh 功能的本地终端上,运行

      ssh -N -f -L localhost:8000:localhost:7000 <username>@<host>
      

      如果您使用的是 Windows,我建议您使用 MobaXtermCygwin

      打开网络浏览器,输入地址localhost:8000 以使用 Spark 进入您的笔记本

      现在一些预防措施,我从来没有在 Python 3 上尝试过这个,所以这可能对你有用,也可能不适合你。不管怎样,你真的应该在 Spark 1.5 上使用 Python 2。我的公司也使用 Spark 1.5,因为没有人使用 Python 3。

      更新:

      根据@desertnaut 的cmets,设置

      export PYSPARK_DRIVER_PYTHON=ipython
      

      如果用户需要使用spark-submit,可能会导致问题。如果您想同时使用笔记本和spark-submit,解决方法是创建两个新的环境变量。这是您可以创建的示例

      export PYSPARK_PYTHON=python3 ## for python3
      export ipyspark='PYSPARK_DRIVER_PYTHON=ipython pyspark'
      export pynb='PYSPARK_DRIVER_PYTHON_OPTS="notebook --no-browser --port=7000"'
      

      ipysparkpynb 是 bash 终端上的新命令。

      【讨论】:

      • PYSPARK_DRIVER_PYTHON 设置为ipythonjupyter 是一种非常糟糕 的做法,它会在下游产生严重的问题(例如when trying spark-submit);推荐的方式是create an appropriate Jupyter kernel
      • 是的,如果您需要使用spark-submit,这是一个常见问题。在我之前的工作中,我们以交互方式使用它,因此我们很少使用spark-submit。但是,解决此问题的方法是创建一个新变量ipyspark = PYSPARK_DRIVER_PYTHON=ipython pyspark。我会将此解释为答案的更新。
      猜你喜欢
      • 2021-02-16
      • 2022-01-25
      • 2022-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-14
      • 2018-12-01
      相关资源
      最近更新 更多