Apache spark 将Jupyter笔记本连接到Spark
我有一台安装了Hadoop和Spark的机器。下面是我目前的环境 蟒蛇3.6 spark1.5.2 Hadoop 2.7.1.2.3.6.0-3796 我试图通过构建ipython内核将jupyter笔记本连接到spark 写入2个新文件Apache spark 将Jupyter笔记本连接到Spark,apache-spark,pyspark,ipython-notebook,jupyter,ssh-tunnel,Apache Spark,Pyspark,Ipython Notebook,Jupyter,Ssh Tunnel,我有一台安装了Hadoop和Spark的机器。下面是我目前的环境 蟒蛇3.6 spark1.5.2 Hadoop 2.7.1.2.3.6.0-3796 我试图通过构建ipython内核将jupyter笔记本连接到spark 写入2个新文件 /root/.ipython/profile\u pyspark/ipython\u notebook\u config.py c = get_config() c.NotebookApp.port = 80 /root/.ipython/profile_p
c = get_config()
c.NotebookApp.port = 80
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())
{
"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/"
}
}
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_笔记本_config.py
c = get_config()
c.NotebookApp.port = 80
然后,当我运行以下命令时
jupyter notebook --profile=pyspark
笔记本运行良好。然后,我将内核更改为“PySpark(Spark 2.0.0)”,它假设使用“sc”Spark上下文。但是,当我键入“sc”时,它不会显示任何内容
所以,由于sc不能初始化,如果我想运行以下程序,它失败了
nums = sc.parallelize(xrange(1000000))
有谁能帮我配置jupyter笔记本与Spark对话吗?仅供参考,python 3.6在Spark 2.1.1版之前不受支持。见JIRA你的问题有很多问题 1) 在上面Punskr的答案之上-Spark 1.5;Python 3支持是在年引入的 2) 即使切换到Python2或,您仍然需要导入Pyspark的相关模块,并在笔记本中手动初始化
sc
变量
3) 您似乎还使用了Jupyter的旧版本,因为配置文件功能在Jupyter>=4中不可用
要在Jupyter>=4中“自动”初始化
sc
,请参阅我的答案。您可以进行一些环境更改,使pyspark拥有默认的ipython或Jupyter笔记本电脑
在~/.bashrc
export PYSPARK_PYTHON=python3 ## for python3
export PYSPARK_DRIVER_PYTHON=ipython
export PYSPARK_DRIVER_PYTHON_OPTS="notebook --no-browser --port=7000"
见:
接下来,运行source~/.bashrc
export PYSPARK_PYTHON=python3 ## for python3
export PYSPARK_DRIVER_PYTHON=ipython
export PYSPARK_DRIVER_PYTHON_OPTS="notebook --no-browser --port=7000"
然后,当您启动pyspark
(或使用纱线)时,它将打开一个服务器供您连接
在具有ssh功能的本地终端上,运行
ssh -N -f -L localhost:8000:localhost:7000 <username>@<host>
如果用户需要使用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终端上的新命令。这里似乎发生了很多事情。试着更多地关注你的问题。我建议将Spark 2.0的问题转移到另一个问题。将PYSPARK\u DRIVER\u PYTHON
设置为ipython
或jupyter
是一个非常糟糕的做法,这可能会在下游造成严重的问题(例如);推荐的方法是。是的,如果需要使用spark submit
,这是一个常见的问题。在我以前的工作中,我们以交互方式使用它,因此很少使用spark submit
。但是,围绕这个问题的解决方案是创建一个新变量,ipyspark=PYSPARK\u DRIVER\u PYTHON=ipython-PYSPARK
。我将解释这是对答案的更新。