“nbsphinx-toctree”: { “maxdepth”: 3, “numbered”: true }

安装并启动jupyter

安装并启动jupyter

安装 Anaconda 后, 再安装 jupyter

pip install jupyter
  • 设置环境

    ipython --ipython-dir= # override the default IPYTHONDIR directory, ~/.ipython/ by default
    ipython profile create foo # create the profile foo
    ipython profile locate foo # find foo profile directory, IPYTHONDIR by default,
    ipython --profile=foo # start IPython using the new profile
    

启动jupyter的几个命令, 启动后, 默认还将启动一个浏览器进入 notebook 环境 ipython notebook # 启动 jupyter notebook服务器, 使用默认端口8080 ipython notebook –ip=0.0.0.0 –port=80 # 启动 jupyter notebook服务器, 指定端口 ipython notebook –profile=foo # 使用 foo profile 启动 jupyter notebook服务器 ipython notebook –pylab inline # 启用 PyLab graphing support ipython notebook 是老版本的命令组合, 新版是jupyter notebook命令组合, 如果使用Anaconda的发布包, 直接使用jupyter-notebook这个工具.

更多jupyter使用信息, 见 http://nbviewer.jupyter.org/github/ipython/ipython/blob/3.x/examples/Notebook/Notebook%20Basics.ipynb

定制Jupyter

[root#]./jupyter-notebook –generate-config 将生成一个jupyter的配置文件, 比如 /root/.jupyter/jupyter_notebook_config.py , 在其中可配置Notebook App的基本信息 文件名为: /root/.jupyter/jupyter_notebook_config.py

c = get_config()
c.IPKernelApp.pylab = 'inline'
c.NoteBookApp.ip = '0.0.0.0'
c.NotebookApp.open_browser = False
c.NotebookApp.port = 8880 # or whatever you want

为 notebook 的 cell增加line number

在 ~/.ipython/profile_foo/static/custom/custom.js 增加下面几行

define([ ‘base/js/namespace’, ‘base/js/events’ ], function(IPython, events) { events.on(“app_initialized.NotebookApp”, function () { require(“notebook/js/cell”).Cell.options_default.cm_config.lineNumbers = true; } ); } );

更改jupyter的主题

https://github.com/transcranial/jupyter-themer 更改命令 jupyter-themer -c monokai 访问远端的notebook server

pip install jupyter-themer

Jupyter服务器

如果是在远端开启了notebook server, 在本机浏览器直接访问, 将不能打开, 这应该是notebook server为安全考虑, 有意屏蔽非本机的访问. 当然, 我们总不能一直通过x-windows到远端打开浏览器使用notebook吧.

1.最简单的做法是,启动notebook sever时, 加上参数–ip=0.0.0.0, 即: ./jupyter-notebook –port=7777 –ip=0.0.0.0 2.另一个方法是:在本机使用ssh软件建立一个连接远端的ssh tunnel, 本机浏览器通过ssh tunnel就可以访问远端的notebook server. 比如, 我习惯使用putty, 方法是: putty-> Connection > SSH > Tunnels Under Add new forwarded port:, enter the following information: Source port: local_port Destination: remote_host:remote_port Click Add.然后, 使用这个配置ssh连接远端server. 访问远端的ipython

jupyter是使用tab能进行代码补全, 但在浏览器中有时并不起作用, 使用远端的ipython就没有这个问题, 当然ipython在EDA(探索式数据分析)文档化方面比notebook弱多了, 鱼和熊掌不能皆得. 我更喜欢ipython qtconsole方式. 连接远端ipython的步骤:

远端开启ipython host, 命令为 ipython kernel -f ~/ipython-connect-info.json # 这是一个没有前端的ipython进程.
将远端的kernel-1234.json 文件复制到本机, 修改其中的ip地址为远端真实的地址
本机上使用putty为kernel-1234.json 文件中的5个port都开启ssh tunnel
本机执行 ipython qtconsole --existing c:\kernel-connect-info.json

与PySpark集成

IPython和普通的Python interpreter相比, 优点在于对交互性支持更好, 所以PySpark只有在需要更好交互性的情形下, 才有集成IPython的必要, 显然只有 pyspark shell 才需要集成IPython. Jupyter和PySpark shell集成方式有好几种, 比如:

先启动IPython, 然后调用pyspark\shell.py启动spark.
启动IPython后, 我们可以手动调用pyspark\shell.py, 将调用脚本加到IPython profile目录中自动启动, 自动启动python程序. 调用pyspark\shell.py应放在文件 ~/.ipython/profile_foo/startup/00-pyspark-setup.py 中.
00-pyspark-setup.py的写法可参考 https://github.com/harisekhon/pytools/blob/master/.ipython-notebook-pyspark.00-pyspark-setup.py

采用IPython 这个高级 interpreter 来启动pyspark
例子1, 在 spark master server 上以notebook的形式启动 pyspark shell.
spark_master_node$ PYSPARK_DRIVER_PYTHON=/usr/python_anaconda/bin/ipython PYSPARK_DRIVER_PYTHON_OPTS="notebook --no-browser --ip=0.0.0.0 --port=7777" pyspark --master spark://quickstart.cloudera:7077

例子2, 在 spark master server 上以ipython kernel的形式启动 pyspark shell, 以便其他机器连入 spark_master_node$ PYSPARK_DRIVER_PYTHON=/usr/python_anaconda/bin/ipython PYSPARK_DRIVER_PYTHON_OPTS=”kernel -f ~/ipython-connect-info.json” pyspark –master spark://quickstart.cloudera:7077

例子3, 在 spark master server 上以notebook的形式启动 pyspark shell, 并加载额外的package, 指定内存参数. spark_master_node$ PYSPARK_DRIVER_PYTHON=ipython PYSPARK_DRIVER_PYTHON_OPTS=”notebook –no-browser –port=7777 –profile=foo” pyspark –packages com.databricks:spark-csv_2.10:1.1.0 –master spark://spark_master_hostname:7077 –executor-memory 6400M –driver-memory 6400M

设置 PYSPARK_DRIVER_PYTHON 和 PYSPARK_DRIVER_PYTHON_OPTS 环境变量后, 之后调用pyspark将采用这两个环境变量指定的Python 解释器配置来运行python 版spark 应用.

注意不应该export 这两个环境变量, 因为export后, 非shell的pyspark spark应用也将使用IPython运行, 容易造成滥用. 虽然我不推荐在Linux profile将 PYSPARK_DRIVER_PYTHON 设置为IPython, 但我推荐将 PYSPARK_DRIVER_PYTHON 设置为 Anaconda的 python, 因为这将省去安装额外科学计算包的麻烦, 当然, 环境变量PYSPARK_DRIVER_PYTHON_OPTS不应该再带上notebook或kernel参数.

最好在 spark-env.sh 增加下面4个参数,

# worker和driver 的python版本应该是一致的, 否则spark会报错的, 当然driver可以设置为ipython.
export PYSPARK_PYTHON=/usr/bin/python3
export PYSPARK_DRIVER_PYTHON=/usr/bin/ipython3
# 为了简化提交pyspark 应用的提交,可以预先设置一个 PYSPARK_SUBMIT_ARGS 环境变量.
export PYSPARK_SUBMIT_ARGS='--master local[2]'
export PYSPARK_SUBMIT_ARGS='--master yarn --deploy-mode client --num-executors 24 --executor-memory 10g --executor-cores 5'
  • 参考文章
  1. How-to: Use IPython Notebook with Apache Spark
  2. http://blog.cloudera.com/blog/2014/08/how-to-use-ipython-notebook-with
  3. https://www.dataquest.io/blog/installing-pyspark/
  4. Configuring IPython Notebook Support for PySpark
  5. Using Jupyter on Apache Spark: Step-by-Step with a Terabyte of Reddit Data
  6. 如何自定义jupyter notebook的主题
  7. jupyter cell 增加 line number
  8. Spark编程环境搭建(IPython)
  9. 如何使用Docker快速配置数据科学开发环境(搭建Docker + Jupyter环境 )