安裝並啟動jupyter
安裝 Anaconda
后, 再安裝 jupyter
pip install jupyter
設置環境
ipython --ipython-dir=
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 Basics.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
如果是在遠端開啟了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進程.
- 將遠端的 ipython-connect-info.json 文件復制到本機, 修改其中的ip地址為遠端真實的地址
- 本機上使用putty為 ipython-connect-info.json 文件中的5個port都開啟ssh tunnel
- 本機執行 ipython qtconsole --existing c:\ipython-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. 如果指定 --master 參數, 必須首先通過 start-master.sh啟動 master; 如果省略該參數, 則會pyspark會自動啟動master進程.
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'
參考文章
How-to: Use IPython Notebook with Apache Spark
http://www.tuicool.com/articles/rqIv6z
http://blog.cloudera.com/blog/2014/08/how-to-use-ipython-notebook-with
How to Install PySpark and Integrate with IPython Notebook
https://www.dataquest.io/blog/installing-pyspark/
http://www.tuicool.com/articles/VFn6j2Y
Configuring IPython Notebook Support for PySpark
http://ramhiser.com/2015/02/01/configuring-ipython-notebook-support-for-pyspark/
Using Jupyter on Apache Spark: Step-by-Step with a Terabyte of Reddit Data
http://blog.insightdatalabs.com/jupyter-on-apache-spark-step-by-step/
如何自定義jupyter notebook的主題
http://www.cnblogs.com/wybert/p/5030697.html
jupyter cell 增加 line number
https://stackoverflow.com/questions/20197471/how-to-display-line-numbers-in-ipython-notebook-code-cell-by-default/20197878
Spark編程環境搭建(IPython)
http://www.kinelf.com/?p=169
如何使用Docker快速配置數據科學開發環境(搭建Docker + Jupyter環境 )
https://linux.cn/article-6644-1.html