1.安裝Jupyter筆記本
$ pip install jupyter
2.安裝PySpark
確保您的計算機上安裝了Java 8或更高版本。當(dāng)然,你也需要Python(我推薦使用Anaconda的 Python 3.5 )。
現(xiàn)在訪問Spark下載頁面。選擇最新的Spark發(fā)行版,這是Hadoop的預(yù)建套件。
如果你想要Hive支持或更多花哨的東西,你將不得不通過你自己的方式來構(gòu)建你的spark發(fā)行版 - > Build Spark。
解壓縮并將其移至您的/ opt文件夾中:
$ tar -xzf spark-2.2.0-bin-hadoop2.6.tgz
$ mv spark-2.2.0-bin-hadoop2.6 /opt/spark-2.2.0
創(chuàng)建一個符號鏈接(這將讓你有多個spark版本):
$ ln -s /opt/spark-2.2.0 / opt / spark
最后,告訴你的bash(或zsh等)在哪里可以找到spark。為此,請在?/ .bashrc(或?/ .zshrc)文件中添加以下幾行來配置$ PATH變量:
export SPARK_HOME=/ opt / spark
export PATH=$ SPARK_HOME / bin:$ PATH
現(xiàn)在,要在Jupyter中運行PySpark,您需要更新PySpark驅(qū)動程序環(huán)境變量。只需將這些行添加到?/ .bashrc(或?/ .zshrc)文件中:
export PYSPARK_DRIVER_PYTHON=jupyter
export PYSPARK_DRIVER_PYTHON_OPTS='notebook'
重新啟動(我們的來源)您的終端并啟動PySpark:
$ pyspark
現(xiàn)在,該命令應(yīng)該在您的Web瀏覽器中啟動Jupyter Notebook。點擊'New'>'Notebooks Python [default]'創(chuàng)建一個新的筆記本。而且,你的計算機中有一個SparkContext和SqlContext(或SparkSession for Spark> 2.x),并且可以在筆記本中運行PySpark(運行一些示例來測試你的環(huán)境)。
有時你需要一個完整的IDE來創(chuàng)建更復(fù)雜的代碼,PySpark默認(rèn)不在sys.path中,但這并不意味著它不能用作常規(guī)庫。您可以通過在運行時將PySpark添加到sys.path來解決此問題。findspark包為你做。
要安裝findspark,只需輸入:
$ pip install findspark
然后在您的IDE(我使用PyCharm)初始化PySpark,只需調(diào)用:
import findspark
findspark.init()
import pyspark
sc=pyspark.SparkContext(appName=“myAppName”)
就是這樣。以下是一個獨立應(yīng)用程序的完整示例,用于在本地測試PySpark(使用上面解釋的conf):
import findspark
findspark.init("/opt/spark")
import random
from pyspark import SparkContext
sc=SparkContext(appName="EstimatePi")
def inside(p):
x, y=random.random(), random.random()
return x*x + y*y < 1
NUM_SAMPLES=1000000
count=sc.parallelize(range(0, NUM_SAMPLES)) \
.filter(inside).count()
print("Pi is roughly %f" % (4.0 * count / NUM_SAMPLES))
sc.stop()
看起來因為代碼高亮插件的影響, 自動高亮的代碼的格式有點問題…
后面會來解決這個問題
目前我們系統(tǒng)的整體架構(gòu)大概是: Spark Standalone Cluster + NFS FileServer. 自然, 這些都是基于Linux系統(tǒng).
Windows在開發(fā)PySpark程序的時候, 大部分情況都沒有什么問題. 但是有兩種情況就比較蛋疼了:
讀取NFS文件
Windows底下, 一旦涉及到NFS的文件路徑, 就歇菜了: 因為NFS的文件路徑都是比如 /mnt/nfs/xxx 這種, 而Windows上面完全無法實現(xiàn).
消耗性能
雖然作為client, 理論上不需要太強悍的性能, 但是有的事情并不合適Spark. 這個時候, 能有一個強力的client, 就美滋滋了!
關(guān)于NFS的解決方案, 一種很簡單的解決方案就是起一個虛擬機. 我這邊選擇的方案:
基于Docker的JupyerNotebook 作為pyspark的開發(fā)工具.
PS: 筆者在這里就不對比兩種方案的優(yōu)劣了. 各位看官可以根據(jù)自己的需求進行選取.
安裝Docker
這個網(wǎng)上已經(jīng)很多教程了.
在這里推薦一個: 安裝· Docker —— 從入門到實踐 – yeasy – GitBook
基礎(chǔ)環(huán)境
基礎(chǔ)鏡像
因為我們主力是python語言, 有時候還需要做一些AI/ML Task.
我選取的是TensorFlow的鏡像: Pull的命令: docker pull tensorflow/tensorflow
mount NFS
首先安裝nfs-common
. 以ubuntu為例: apt install -y nfs-common
mount命令:
sudo mount -t nfs remote_server:remote_dir /mnt/nfs3
# 注意: 一定要加上 --net=host --pid=host -e TINI_SUBREAPER=true
sudo
docker run --name spark-learn -d\
--net=host --pid=host -e TINI_SUBREAPER=
true
\
-p 8888:8888 -
v
/notebooks
:
/notebooks
\
-
v
/mnt/nfs3
:
/mnt/nfs3
\
tensorflow
/tensorflow
啟動docker:
否則在后面運行spark腳本之后, 會遇到很詭異的提示”資源不足”
配置環(huán)境
這個時候, 已經(jīng)可以直接打開notebook寫python了. 所以,有的操作我就放python代碼了.
修改APT源 (使用163)
安裝JDK
直接APT安裝openjdk 不要太方便啊, 比手動安裝oracle-jdk 方便多了. 而且目前看來, spark對他的兼容性也是得到保證的.
!apt-get install openjdk-8-jre -y
# ipython notebook之中表示執(zhí)行命令
!
cp
/etc/apt/sources
.list
/etc/apt/sources
.list.bak
import
os
source
=&
#039;''
deb http:
//mirrors
.163.com
/ubuntu/
xenial main restricted universe multiverse
deb http:
//mirrors
.163.com
/ubuntu/
xenial-security main restricted universe multiverse
deb http:
//mirrors
.163.com
/ubuntu/
xenial-updates main restricted universe multiverse
deb http:
//mirrors
.163.com
/ubuntu/
xenial-proposed main restricted universe multiverse
deb http:
//mirrors
.163.com
/ubuntu/
xenial-backports main restricted universe multiverse
deb-src http:
//mirrors
.163.com
/ubuntu/
xenial main restricted universe multiverse
deb-src http:
//mirrors
.163.com
/ubuntu/
xenial-security main restricted universe multiverse
deb-src http:
//mirrors
.163.com
/ubuntu/
xenial-updates main restricted universe multiverse
deb-src http:
//mirrors
.163.com
/ubuntu/
xenial-proposed main restricted universe multiverse
deb-src http:
//mirrors
.163.com
/ubuntu/
xenial-backports main restricted universe multiverse
&
#039;''
with
open
(&
#039;/etc/apt/sources.list', 'w') as f :
f.write(
source
)
!apt update
mkdir_p(pip_config_dir)
change("tsinghua")
# 我的網(wǎng)絡(luò)發(fā)現(xiàn)清華的鏡像比阿里云還要快!
安裝Maven
有時候, pyspark需要依賴其他的包的時候, 需要使用maven下載.
使用APT安裝還是最方便的 :
apt-get install maven -y
修改pip源 + 安裝pyspark
因為pyspark比較大, 網(wǎng)絡(luò)不好的同學(xué)建議修改pip源.
修改pip源, 推薦我的小工具: https://github.com/RangerWolf/pip-ex
使用很簡單:
之后pip安裝飛起來了! 安裝pyspark就一句話: pip install pyspark
其他說明:
實時查看Spark運行日志
Spark的運行l(wèi)og并不會直接在notebook上面顯示. 需要使用docker logs
命令才能看到.
如果我們需要在命令自動顯示最新的log, 而不需要我們每次手動輸入, 可以使用下面的命令:
docker logs -f --tail 100 spark-learn
網(wǎng)絡(luò)速度監(jiān)控
第一次運行Spark程序的時候, 我發(fā)現(xiàn)一個很簡單的命令也沒有執(zhí)行彎成. 以為是網(wǎng)絡(luò)IO太久了.
想看看是不是網(wǎng)絡(luò)卡, 我發(fā)現(xiàn)下面這個神器:
# 安裝
sudo
apt-get
install
speedometer
# 運行
speedometer -rx eth0 -tx eth0
# docker環(huán)境下, 可以多試幾個
# 可以使用ifconfig 查看
speedometer -rx docker0 -tx docker0
speedometer -rx eno0 -tx eno0
在命令行就直接顯示出這種圖片, 真是太牛了!