在 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 EMR 上重启纱线

如何在多个子网上运行 AWS EMR 集群?

在不使用 aws 凭据的情况下连接 Redshift 和 Python(在 emr 上运行)

在 AWS EMR 上使用 pyspark

Apache Hudi在AWS Glue和AWS EMR上同步元数据的异同

Apache Hudi在AWS Glue和AWS EMR上同步元数据的异同