将 Jupyter 笔记本连接到 Spark
Posted
技术标签:
【中文标题】将 Jupyter 笔记本连接到 Spark【英文标题】:Connecting Jupyter notebook to 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 个新文件。
/root/.ipython/profile_pyspark/ipython_notebook_config.py
/root/.ipython/profile_pyspark/startup/00-pyspark-setup.py
/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 问题转移到另一个问题。 【参考方案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,我建议您使用 MobaXterm 或 Cygwin。
打开网络浏览器,输入地址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"'
ipyspark
和 pynb
是 bash 终端上的新命令。
【讨论】:
将PYSPARK_DRIVER_PYTHON
设置为ipython
或jupyter
是一种非常糟糕 的做法,它会在下游产生严重的问题(例如when trying spark-submit
);推荐的方式是create an appropriate Jupyter kernel。
是的,如果您需要使用spark-submit
,这是一个常见问题。在我之前的工作中,我们以交互方式使用它,因此我们很少使用spark-submit
。但是,解决此问题的方法是创建一个新变量ipyspark = PYSPARK_DRIVER_PYTHON=ipython pyspark
。我会将此解释为答案的更新。以上是关于将 Jupyter 笔记本连接到 Spark的主要内容,如果未能解决你的问题,请参考以下文章
将本地 IPython 笔记本连接到气隙集群上的 Spark
从本地 jupyter notebook 连接到 spark 集群