Spark+Jupyter=線上文字資料處理邏輯測試平臺
前言
最近在學習Spark,除了原生的Scala以外,Spark還提供了一個pyspark支援Python。以前曾經搭過一個基於IPython notebook的線上程式碼執行平臺,其中用到的numpy,scipy,matplotlib,pandas等文字/資料處理庫讓我覺得如果能和pyspark結合說不定是個不錯的組合——可以直觀的測試程式碼邏輯,比起shell不知道要高到哪裡去了。
至於這個平臺,你可以搭載在樹莓派,阿里雲ecs,甚至是本機架設,方便快捷簡單易上手。
事實上對於這篇文章,你也可以單純把它看作是單機佈置偽分散式Spark的教程,因為前面步驟一樣一樣的。
前期準備
硬體:
Linux/Mac計算機 x1
Linux用Ubuntu作為示例,Mac預設有HomeBrew或者Macport
軟體:
Java環境,配置過JAVA_HOME
Python環境,預設為Python2
需聯網,沒有網路的請自行下載原始碼包並上傳至機器
下載
Spark:
前往Apache官網下載:
- hadoop2.6.0.tar.gz
- spark-1.6.1-bin-hadoop2.6.tar.gz
- scala-2.10.6.tar.gz
下載並統一使用
tar xvzf XXX.tar.gz
進行解壓,之後執行
$mv hadoop2.6.0 /usr/local/hadoop
$mv spark-1.6.1-bin-hadoop2.6 /usr/local/spark
$mv scala-2.10.6 /usr/lcoal/scala
將資料夾移動到/usr/local備用
IPython:
之前用的Ipython notebook已經獨立出來變成了jupyter,在這個步驟Python首先要安裝setuptools,之後執行
$easy_install pip virtualenv
Virtualenv是Python的一個沙盒環境,適合配置不同版本的庫來適配不同應用。
之後用Virtualenv建立一個IPython ENV
$cd /your/IPython/path/
$virtualenv ipython
$source ipython/bin/activate
(ipython)$
當前綴出現(ipython)的時候,說明這個env已經建立成功並正在使用中,如果需要退出就執行
(ipython)$cd ipython/bin && deactivate
$
之後在ipython環境中執行
(ipython)$pip install ipython jupyter numpy scipy pandas snownlp
安裝matplotlib庫則稍微麻煩些,需要先安裝其依賴的包libpng和freetype
安裝libpng:
$apt-get install libpng-dev
安裝freetype:
$cd ~/Downloads
$wget http://download.savannah.gnu.org/releases/freetype/freetype-2.4.10.tar.gz
$tar zxvf freetype-2.4.10.tar.gz
$cd freetype-2.4.10/
$./congfigure
$make
$make install
之後執行
pip install matplotlib
配置環境變數
在這一步,Ubuntu請執行
$vim ~/.bashrc
Mac執行
$vim ~/.bash_profile
在檔案末尾輸入:
export PATH="$PATH:/usr/local/share/scala/bin"
export HADOOP_INSTALL=/usr/local/hadoop
export PATH=$PATH:$HADOOP_INSTALL/bin
export PATH=$PATH:$HADOOP_INSTALL/sbin
export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_HOME=$HADOOP_INSTALL
export HADOOP_HDFS_HOME=$HADOOP_INSTALL
export YARN_HOME=$HADOOP_INSTALL
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
export SPARK_HOME=/usr/local/spark
export PATH=$PATH:$SPARK_HOME/bin
export PYTHONPATH=$PYTHONPATH:$SPARK_HOME/python
export PYTHONPATH=$PYTHONPATH:$SPARK_HOME/python/lib/py4j-0.9-src.zip
IPYTHON_OPTS="notebook"$SPARK_HOME/bin/pyspark
:wq儲存退出之後可以開始進行最後一步的spark環境配置了
Spark配置:
說是Spark的配置其實是更像是Hadoop的配置,畢竟Spark預設配置就能執行。
首先進入Hadoop的配置資料夾
$cd /usr/local/hadoop/etc/hadoop
$ls
你可以看到以下幾個檔案
- core-site.xml
- yarn-site.xml
- mapred-site.xml
- hdfs-site.xml
別急一個一個來
vim core-site.xml
寫入
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
vim yarn-site.xml
寫入
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
如果沒有mapred-site.xml
$ mv mapred-site.xml.template mapred-site.xml && vim mapred-site.xml
寫入
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
vim hdfs-site.xml
寫入
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
呼,長噓一口氣
然後格式化一下namenode
$hdfs namenode -format
啟動hadoop服務
$start-all.sh
輸入數次密碼,如果不想每次都輸密碼就百度一下hadoop的ssh免密配置
$jps
看到如下
17785 SecondaryNameNode
17436 NameNode
17591 DataNode
18096 NodeManager
17952 ResourceManager
23635 Jps
很好你成功啟動了hadoop,接下來進入spark資料夾
$cd $SPARK_HOME/sbin
$start-all.sh
輸入一次密碼之後檢視jps是否多了一個worker和一個master,不出意外的話你的spark應該是能運行了
啟動Jupyter
好累啊終於到了這一步了,進入ipython環境的前提下執行
(ipython)$jupyter notebook --generate-config
(ipython)$vim ~/.jupyter/jupyterA_notebook_config.py
寫入
c.NotebookApp.ip='*'
c.NotebookApp.open_browser = False
c.NotebookApp.port =8888
然後執行
jupyter notebook
在瀏覽器輸入http://ip_address:8888就能訪問辣!
然後就愉快的新建notebook開始敲程式碼叭!
oh yeah