为Pyspark创建自定义Jupyter内核#

这些说明添加了一个自定义的Jupyter Notebook选项,允许用户选择PySpark作为内核。

安装Spark#

安装Spark的最简单方法是使用Cloudera CDH

您将使用YARN作为资源管理器。安装Cloudera CDH后,安装Spark。Spark附带了一个PySpark shell。

为PySpark创建一个笔记本内核#

您可以以管理员或普通用户的身份创建内核。请阅读以下说明以帮助您选择使用哪种方法。

1. 作为管理员#

创建一个新的内核并将其指向每个项目中的根环境。为此,在/opt/wakari/wakari-compute/share/jupyter/kernels/中创建一个名为‘pyspark’的目录。

创建以下 kernel.json 文件:

{"argv": ["/opt/wakari/anaconda/bin/python",
 "-m", "ipykernel", "-f", "connection_file}", "--profile", "pyspark"],
 "display_name":"PySpark",  "language":"python" }

您可以为‘display_name’选择任何名称。

此配置指向根环境中的python可执行文件。由于该环境由管理员控制,用户无法向环境中添加新包。他们需要管理员帮助更新环境。

2. 作为没有IPython配置文件的系统管理员#

要在没有用户 .ipython 空间的情况下拥有管理员级别的 PySpark 内核:

{"argv":
["/opt/wakari/wakari-compute/etc/ipython/pyspark.sh", "-f", "{connection_file}"],
"display_name":"PySpark",  "language":"python" }

注意:pyspark.sh 脚本在下面的没有 IPython 配置文件部分中定义。

3. 作为普通用户#

在用户的主目录中创建一个新目录:.local/share/jupyter/kernels/pyspark/。这样用户将使用默认环境,并且能够升级或安装新的包。

创建以下 kernel.json 文件:

{"argv": ["/projects/<username>/<project_name>/envs/default/bin/python",
 "-m", "ipykernel", "-f", "connection_file}", "--profile", "pyspark"],
 "display_name":"PySpark",  "language":"python" }

注意:将“”替换为正确的用户名,将“”替换为正确的项目名称。

您可以为‘display_name’选择任何名称。

创建一个IPython配置文件#

上述来自内核的配置文件调用要求我们定义一个特定的PySpark配置文件。应为每个登录AEN以使用PySpark内核的用户创建此配置文件。

在用户的主目录中,创建目录和文件 ~/.ipython/profile_pyspark/startup/00-pyspark-setup.py,文件内容如下:

import os
import sys

# The place where CDH installed spark, if the user installed Spark locally it can be changed here.
# Optionally we can check if the variable can be retrieved from environment.

os.environ["SPARK_HOME"] = "/usr/lib/spark"

os.environ["PYSPARK_PYTHON"] = "/opt/wakari/anaconda/bin/python"

# And Python path
os.environ["PYLIB"] = os.environ["SPARK_HOME"] + "/python/lib"
sys.path.insert(0, os.environ["PYLIB"] +"/py4j-0.9-src.zip")  #10.4-src.zip")
sys.path.insert(0, os.environ["PYLIB"] +"/pyspark.zip")

os.environ["PYSPARK_SUBMIT_ARGS"] = "--name yarn pyspark-shell"

现在使用具有PySpark配置文件的用户帐户登录。

没有IPython配置文件#

如果必须避免为用户创建本地配置文件,可以制作一个从内核调用的脚本。创建一个将加载环境变量的bash脚本:

sudo -u $AEN_SRVC_ACCT mkdir /opt/wakari/wakari-compute/etc/ipython
sudo -u $AEN_SRVC_ACCT touch /opt/wakari/wakari-compute/etc/ipython/pyspark.sh
sudo -u $AEN_SRVC_ACCT chmod a+x /opt/wakari/wakari-compute/etc/ipython/pyspark.sh

文件的内容应如下所示:

#!/usr/bin/env bash
# setup environment variable, etc.

export PYSPARK_PYTHON="/opt/wakari/anaconda/bin/python"
export SPARK_HOME="/usr/lib/spark"

# And Python path
export PYLIB=$SPARK_HOME:/python/lib
export PYTHONPATH=$PYTHONPATH:$PYLIB:/py4j-0.9-src.zip
export PYTHONPATH=$PYTHONPATH:$PYLIB:/pyspark.zip

export PYSPARK_SUBMIT_ARGS="--name yarn pyspark-shell"

# run the ipykernel
exec /opt/wakari/anaconda/bin/python -m ipykernel $@

使用 PySpark#

在项目中创建新笔记本时,现在可以选择PySpark作为内核。创建此类笔记本时,您将能够导入pyspark并开始使用它:

from pyspark import SparkConf
from pyspark import SparkContext

注意:您可以始终将上述行以及您可能经常使用的任何其他命令添加到PySpark设置文件00-pyspark-setup.py中。