为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
中。