前言
最近在學(xué)習(xí)Spark,除了原生的Scala以外,Spark還提供了一個(gè)pyspark支持Python。以前曾經(jīng)搭過一個(gè)基于IPython notebook的在線代碼運(yùn)行平臺(tái),其中用到的numpy,scipy,matplotlib,pandas等文本/數(shù)據(jù)處理庫讓我覺得如果能和pyspark結(jié)合說不定是個(gè)不錯(cuò)的組合——可以直觀的測(cè)試代碼邏輯,比起shell不知道要高到哪里去了。
至于這個(gè)平臺(tái),你可以搭載在樹莓派,阿里云ecs,甚至是本機(jī)架設(shè),方便快捷簡單易上手。
事實(shí)上對(duì)于這篇文章,你也可以單純把它看作是單機(jī)布置偽分布式Spark的教程,因?yàn)榍懊娌襟E一樣一樣的。
前期準(zhǔn)備
硬件:
Linux/Mac計(jì)算機(jī) x1
Linux用Ubuntu作為示例,Mac默認(rèn)有HomeBrew或者M(jìn)acport
軟件:
Java環(huán)境,配置過JAVA_HOME
Python環(huán)境,默認(rèn)為Python2
需聯(lián)網(wǎng),沒有網(wǎng)絡(luò)的請(qǐng)自行下載源碼包并上傳至機(jī)器
下載
Spark:
前往Apache官網(wǎng)下載:
- hadoop2.6.0.tar.gz
- spark-1.6.1-bin-hadoop2.6.tar.gz
- scala-2.10.6.tar.gz
下載并統(tǒng)一使用
tar xvzf XXX.tar.gz
進(jìn)行解壓,之后執(zhí)行
$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
將文件夾移動(dòng)到/usr/local備用
IPython:
之前用的Ipython notebook已經(jīng)獨(dú)立出來變成了jupyter,在這個(gè)步驟Python首先要安裝setuptools,之后執(zhí)行
$easy_install pip virtualenv
Virtualenv是Python的一個(gè)沙盒環(huán)境,適合配置不同版本的庫來適配不同應(yīng)用。
之后用Virtualenv創(chuàng)建一個(gè)IPython ENV
$cd /your/IPython/path/
$virtualenv ipython
$source ipython/bin/activate
(ipython)$
當(dāng)前綴出現(xiàn)(ipython)的時(shí)候,說明這個(gè)env已經(jīng)創(chuàng)建成功并正在使用中,如果需要退出就執(zhí)行
(ipython)$cd ipython/bin && deactivate
$
之后在ipython環(huán)境中執(zhí)行
(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
之后執(zhí)行
pip install matplotlib
配置環(huán)境變量
在這一步,Ubuntu請(qǐng)執(zhí)行
$vim ~/.bashrc
Mac執(zhí)行
$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保存退出之后可以開始進(jìn)行最后一步的spark環(huán)境配置了
Spark配置:
說是Spark的配置其實(shí)是更像是Hadoop的配置,畢竟Spark默認(rèn)配置就能運(yùn)行。
首先進(jìn)入Hadoop的配置文件夾
$cd /usr/local/hadoop/etc/hadoop
$ls
你可以看到以下幾個(gè)文件
- core-site.xml
- yarn-site.xml
- mapred-site.xml
- hdfs-site.xml
別急一個(gè)一個(gè)來
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
啟動(dòng)hadoop服務(wù)
$start-all.sh
輸入數(shù)次密碼,如果不想每次都輸密碼就百度一下hadoop的ssh免密配置
$jps
看到如下
17785 SecondaryNameNode
17436 NameNode
17591 DataNode
18096 NodeManager
17952 ResourceManager
23635 Jps
很好你成功啟動(dòng)了hadoop,接下來進(jìn)入spark文件夾
$cd $SPARK_HOME/sbin
$start-all.sh
輸入一次密碼之后查看jps是否多了一個(gè)worker和一個(gè)master,不出意外的話你的spark應(yīng)該是能運(yùn)行了
啟動(dòng)Jupyter
好累啊終于到了這一步了,進(jìn)入ipython環(huán)境的前提下執(zhí)行
(ipython)$jupyter notebook --generate-config
(ipython)$vim ~/.jupyter/jupyterA_notebook_config.py
寫入
c.NotebookApp.ip='*'
c.NotebookApp.open_browser = False
c.NotebookApp.port =8888
然后執(zhí)行
jupyter notebook
在瀏覽器輸入http://ip_address:8888就能訪問辣!
然后就愉快的新建notebook開始敲代碼叭!
oh yeah