在 AWS EMR v4.0.0 上使用 Pyspark 配置 Ipython/Jupyter 笔记本
Posted
技术标签:
【中文标题】在 AWS EMR v4.0.0 上使用 Pyspark 配置 Ipython/Jupyter 笔记本【英文标题】:Configure Ipython/Jupyter notebook with Pyspark on AWS EMR v4.0.0 【发布时间】:2015-09-26 10:20:46 【问题描述】:我正在尝试将 IPython notebook 与 Apache Spark 1.4.0 一起使用。我已经按照下面的 2 教程来设置我的配置
Installing Ipython notebook with pyspark 1.4 on AWS
和
Configuring IPython notebook support for Pyspark
配置完成后,相关文件中的代码如下:
1.ipython_notebook_config.py
c=get_config()
c.NotebookApp.ip = '*'
c.NotebookApp.open_browser =False
c.NotebookApp.port = 8193
2.00-pyspark-setup.py
import os
import sys
spark_home = os.environ.get('SPARK_HOME', None)
sys.path.insert(0, spark_home + "/python")
# Add the py4j to the path.
# You may need to change the version number to match your install
sys.path.insert(0, os.path.join(spark_home, 'python/lib/py4j-0.8.2.1-src.zip'))
# Initialize PySpark to predefine the SparkContext variable 'sc'
execfile(os.path.join(spark_home, 'python/pyspark/shell.py'))
我还在我的 .bash_profile 中添加了以下两行:
export SPARK_HOME='home/hadoop/sparl'
source ~/.bash_profile
但是,当我运行时
ipython notebook --profile=pyspark
它显示消息:无法识别的别名 '--profile=pyspark' 它可能没有效果
笔记本好像没有配置pyspark成功 有谁知道如何解决它?非常感谢
以下是一些软件版本
ipython/Jupyter:4.0.0
火花1.4.0
AWS EMR:4.0.0
蟒蛇:2.7.9
顺便说一句,我已经阅读了以下内容,但它不起作用 IPython notebook won't read the configuration file
【问题讨论】:
听起来 pyspark 配置文件不存在。文件夹~/.ipython/profile_pyspark
存在吗?
您好,感谢您的评论。 profile_pyspark 存在。奇怪的是,当我添加 export SPARK_HOME='usr/lib/spark' export Ipython=1 export PYSPARK_PYTHON=/usr/bin/python2.7 export PYSPARK_DRIVER_PYTHON=ipython3 export PYSPARK_DRIVER_PYTHON_OPTS="notebook" 到 .bashrc 并 export PYSPARK_PYTHON= /usr/bin/python2.7 export PYSPARK_DRIVER_PYTHON=ipython3 \n \n to spark-env.sh 一切正常!
参考这个答案***.com/questions/25205264/…
【参考方案1】:
Jupyter 笔记本没有配置文件的概念(就像 IPython 那样)。使用不同配置启动的推荐方式是:
JUPTYER_CONFIG_DIR=~/alternative_jupyter_config_dir jupyter notebook
另请参阅 issue jupyter/notebook#309,您会在其中找到描述 how to set up Jupyter notebook with PySpark without profiles or kernels 的评论。
【讨论】:
【参考方案2】:这对我有用...
更新 ~/.bashrc 为:
export SPARK_HOME="<your location of spark>"
export PYSPARK_SUBMIT_ARGS="--master local[2] pyspark-shell"
(查找这些参数的 pyspark 文档)
然后创建一个新的 ipython 配置文件,例如。 pyspark:
ipython profile create pyspark
然后在~/.ipython/profile_pyspark/startup/00-pyspark-setup.py
中创建并添加以下行:
import os
import sys
spark_home = os.environ.get('SPARK_HOME', None)
sys.path.insert(0, spark_home + "/python")
sys.path.insert(0, os.path.join(spark_home, 'python/lib/py4j-0.9-src.zip'))
filename = os.path.join(spark_home, 'python/pyspark/shell.py')
exec(compile(open(filename, "rb").read(), filename, 'exec'))
spark_release_file = spark_home + "/RELEASE"
if os.path.exists(spark_release_file) and "Spark 1.6" in open(spark_release_file).read():
pyspark_submit_args = os.environ.get("PYSPARK_SUBMIT_ARGS", "")
(更新 py4j 和 spark 的版本以适合您的情况)
然后mkdir -p ~/.ipython/kernels/pyspark
,然后在文件~/.ipython/kernels/pyspark/kernel.json
中创建并添加以下行
"display_name": "pySpark (Spark 1.6.1)",
"language": "python",
"argv": [
"/usr/bin/python",
"-m",
"IPython.kernel",
"--profile=pyspark",
"-f",
"connection_file"
]
现在您应该在 jupyter 的新笔记本选项下看到这个内核 pySpark (Spark 1.6.1)。您可以通过执行sc
进行测试,应该会看到您的 spark 上下文。
【讨论】:
【参考方案3】:我尝试了很多方法来解决这个4.0版本的问题,最后我决定安装3.2.3版本。 IPython:
conda install 'ipython<4'
这太令人兴奋了!并希望对大家有所帮助!
参考:https://groups.google.com/a/continuum.io/forum/#!topic/anaconda/ace9F4dWZTA
【讨论】:
【参考方案4】:正如人们评论的那样,在 Jupyter 中您不需要配置文件。您需要做的就是导出 jupyter 的变量以找到您的 spark 安装(我使用 zsh,但它与 bash 相同)
emacs ~/.zshrc
export PATH="/Users/hcorona/anaconda/bin:$PATH"
export SPARK_HOME="$HOME/spark"
export PATH=$SPARK_HOME/bin:$PATH
export PYSPARK_SUBMIT_ARGS="--master local[*,8] pyspark-shell"
export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH
export PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.9-src.zip:$PYTHONPATH
在PYSPARK_SUBMIT_ARGS
中添加pyspark-shell
很重要
我发现this guide 很有用,但并不完全准确。
我的配置是本地的,但如果您将PYSPARK_SUBMIT_ARGS
用于您需要的配置,应该可以工作。
【讨论】:
【参考方案5】:我在指定 --profile **kwarg 时遇到了同样的问题。似乎是新版本的普遍问题,与Spark无关。如果您降级到 ipython 3.2.1,您将能够再次指定配置文件。
【讨论】:
以上是关于在 AWS EMR v4.0.0 上使用 Pyspark 配置 Ipython/Jupyter 笔记本的主要内容,如果未能解决你的问题,请参考以下文章
在不使用 aws 凭据的情况下连接 Redshift 和 Python(在 emr 上运行)