1. 程式人生 > >Spark+Jupyter=線上文字資料處理邏輯測試平臺

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