为 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" }

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

您可以为 ‘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 中。