Jupyter與Spark開發(fā)環(huán)境配置指南
什么是Spark仆嗦?
Spark是使用大量數(shù)據(jù)進(jìn)行計算的框架辉阶。為什么需要Spark?比如瘩扼,一個易于讀入內(nèi)存的小型數(shù)據(jù)集谆甜,Gb級的,你可能會使用Pandas集绰,R或其他工具加載整個數(shù)據(jù)集店印,并且之后進(jìn)行一些清洗和可視化,如果使用合適的計算機(jī)(或云計算基礎(chǔ)設(shè)施)倒慧,你將輕松完成而沒有計算性能相關(guān)的麻煩。
現(xiàn)在你必須處理1Tb(或更大)的數(shù)據(jù)集,并訓(xùn)練一個機(jī)器學(xué)習(xí)算法纫谅。即使使用強(qiáng)大的電腦也是瘋狂的炫贤。Spark 提供了處理這些數(shù)據(jù)怪物所需的兩個功能:
- 并行計算:你使用的不是一臺而是多臺計算機(jī)來加速
- 容錯:如果某臺計算機(jī)在處理過程中間掛起,則必須能夠恢復(fù)付秕。
Spark如何在內(nèi)部工作原理超出了本教程的范圍兰珍,假設(shè)你已經(jīng)熟悉了。無論如何询吴,你不需要Spark的知識來設(shè)置并運行自己的集群掠河。
什么是Spark集群,“獨立”是什么意思猛计?
Spark集群
Spark集群是一些運行Spark并且一起工作的計算機(jī)唠摹。一個集群包括:
- Master:是安排一切工作的電腦之一。它分配工作并管理一切奉瘤。
- Slaves:是完成工作的電腦勾拉。他們按照Map Reduce模式處理大量數(shù)據(jù)集的塊。任一計算機(jī)可以同時成為Master和 Slaves盗温。
獨立
這意味著集群中每臺計算機(jī)都安裝了Spark藕赞。正在使用中的集群管理器由Spark提供。還有其他的集群管理器卖局,如Apache Mesos和Hadoop YARN斧蜕。
要求
按照本教程,你需要:
- 至少兩臺電腦:這就是一個集群砚偶。
- Linux:它也適用于OSX批销,你必須能夠運行shell腳本。到目前為止蟹演,還沒有看到Spark在傳統(tǒng)Windows上運行风钻。
對于本教程,我已經(jīng)使用了帶有Ubuntu 17.04的MacBook Air酒请,以及運行Ubuntu 16.04 LTS的Linux子系統(tǒng)的Windows 10骡技。
如果不符合這些要求,請不要擔(dān)心羞反,請按照以下步驟操作:
- 下載Oracle Virtualbox布朦。
- 下載Linux。
- 在Virtualbox中創(chuàng)建虛擬機(jī)昼窗,并在其上安裝Linux是趴。
就是這樣,你有2臺Linux系統(tǒng)運行集群澄惊。
警告:同時運行2臺虛擬機(jī)在同一臺計算機(jī)上唆途,可以用于學(xué)習(xí)和原型設(shè)計富雅,但是將失去在真實集群中的性能提升!
教程
步驟1:安裝Java
注意:必須對所有計算機(jī)執(zhí)行此步驟肛搬。
Spark需要Java來運行没佑。我的建議使用OPEN JDK8。在終端中運行如下命令:
測試Java安裝類型:
可以看到以下輸出:
步驟2:安裝Spark
下載Spark温赔。在本教程中使用了2.2.0 pre-built蛤奢。可以去Spark下載頁面并從那里下載陶贼,如果無法訪問圖形桌面啤贩,并且必須使用命令行才能運行:
之后,主目錄中有Spark壓縮包拜秧。解壓并移動到home文件夾(推薦但不是必需的)痹屹,以防將其下載到「下載」文件夾中。
解壓縮:
移動(可選):
最后設(shè)置所需的環(huán)境變量SPARK_HOME
腹纳。
轉(zhuǎn)到主目錄痢掠,并使用文本編輯器打開「.bashrc」文件:
在文件末尾添加如下內(nèi)容。當(dāng)打開計算機(jī)或開始交互時嘲恍,它將設(shè)置變量足画。將來該文件夾??的名稱可能會更改,并且與此處寫入的文件夾名稱不匹配佃牛,但過程是類似的淹辞。
保存文件。如果你正在使用nano做ctrl+x
俘侠,鍵入y
并按return
下來完成它象缀。
現(xiàn)在可以檢查Spark安裝。去Spark文件夾并執(zhí)行pyspark:
如果一切正常安裝爷速,可以看到類似于此的輸出:
[圖片上傳失敗...(image-1e8f8f-1511414085008)]
到目前為止央星,你可能會在Spark初始化時看到此警告:
要解決這個問題,必須安裝Hadoop惫东。這是可選的莉给,因為Spark可以運行,但是我猜使用Hadoop可能會有某些性能改進(jìn)廉沮。
步驟3(可選):安裝Hadoop
安裝Hadoop的過程和Spark幾乎是一樣的颓遏,我會快速完成。這是一個可選步驟滞时,并不需要運行集群叁幢。你也可以稍后決定。安裝Hadoop的步驟是:
- 下載Hadoop坪稽÷妫可以自由安裝任何喜歡的版本鳞骤,但版本應(yīng)當(dāng)高于2.7,因為它是Spark的要求演训。這和我們安裝Spark一樣弟孟。等效的命令行表達(dá)式。
- 在home目錄中解壓縮样悟。
- 在
.bashrc
文件末尾添加以下內(nèi)容:
- 通過啟動pyspark測試Hadoop安裝,確保警告沒有再次出現(xiàn)庭猩。
步驟4:啟動master服務(wù)器
在啟動主服務(wù)器之前窟她,必須檢查ip以將其作為主機(jī)參數(shù)傳遞。鍵入以下命令:
可以看到類似的輸出:
復(fù)制第二個inet
中的值蔼水。這是<your_master_ip>
震糖。在這個例子中應(yīng)該復(fù)制192.168.1.143
。
現(xiàn)在趴腋,轉(zhuǎn)到Spark安裝目錄并輸入:
[圖片上傳失敗...(image-4fc397-1511414085008)]
可以看到看到類似的輸出:
現(xiàn)在吊说,在啟動master服務(wù)器的計算機(jī)中訪問localhost:8080
,如果無法訪問Web瀏覽器优炬,但是將其他設(shè)備連接到同一個專用網(wǎng)絡(luò)(例如手機(jī))颁井,通過<your_master_ip>:8080
進(jìn)行訪問。在該URL中蠢护,可以訪問master服務(wù)器Web用戶界面雅宾。
在這個網(wǎng)站葵硕,你可以看到在Spark Logo后面的一個URL參數(shù)類似的spark://<your_master_ip>:7077
眉抬。這個URL非常重要,因為在將slaves連接到集群時懈凹,將需要這個URL蜀变,我將其命名<your_master_url>
。
步驟5:連接slaves
現(xiàn)在你有一臺master服務(wù)器運行介评,是時候啟動幾臺slave服務(wù)器來完成這項工作库北。要啟動slave服務(wù)器,必須使用從master服務(wù)器Web界面復(fù)制的URL,在Spark安裝路徑鍵入以下命令:
[圖片上傳失敗...(image-ca004b-1511414085008)]
你應(yīng)該看到一個非常類似于master的輸出威沫。
在要連接到集群的每臺計算機(jī)上執(zhí)行此操作贤惯。在本教程中,運行2個slaves棒掠。
之后孵构,如果再次訪問master服務(wù)器Web界面,在「Workers」中看到幾行烟很,均是啟動的slave服務(wù)器颈墅。還有一些有用的信息蜡镶,如worker的內(nèi)存、狀態(tài)恤筛、使用的核心和ip官还。
[圖片上傳失敗...(image-e5cc5c-1511414085008)]
也可以點擊Spark Web應(yīng)用程序中的鏈接,然后轉(zhuǎn)到工作頁面和任務(wù)頁面毒坛。由于沒有任何運行的應(yīng)用程序連接到集群望伦,那么無法訪問正在運行和已完成的任務(wù)頁面。
到目前為止煎殷,我們已經(jīng)有一個運行完整的Spark集群屯伞。
步驟6:連接Jupyter
充分利用Spark是與Jupyter這樣的交互式工具集成的好主意。如果您已經(jīng)安裝并運行Jupyter豪直,請?zhí)^以下幾行劣摇,我將介紹如何設(shè)置本地Jupyter服務(wù)器。
安裝Jupyter
安裝Jupyter最簡單的方法是使用conda弓乙。如果你有Anaconda Python發(fā)行版末融,則計算機(jī)中已經(jīng)安裝了conda。如果沒有暇韧,我強(qiáng)烈建議你試一試Anconda勾习。如果不想安裝完整的Anaconda Python(它包含大量庫,需要大約350Mb)锨咙,可以選擇Miniconda语卤,一款僅包含Python和conda的輕型版本。
如果使用命令行酪刀,只需使用curl
下載安裝文件(shell腳本)并執(zhí)行'./'
一旦在計算機(jī)中安裝了conda粹舵,我們將創(chuàng)建一個名為「jupyter」的conda虛擬環(huán)境,避免造成混亂:
現(xiàn)在有一個干凈的虛擬環(huán)境來安裝Jupyter骂倘。要激活此環(huán)境類型:
在環(huán)境激活后眼滤,在命令提示符的開始處可以看到(jupyter):
這意味著環(huán)境已被激活,并且以后所做的更改(安裝庫等)都將在此環(huán)境虛擬環(huán)境生效历涝。
要安裝Jupyter诅需,請鍵入以下命令:
這個命令將安裝Jupyter notebook及其所有的依賴項(IPython,Jupyter等)荧库,所以你不必?fù)?dān)心設(shè)置這些東西堰塌。
現(xiàn)在是時候啟動Jupyter notebook,并測試安裝分衫。鍵入:
如果Jupyter正確安裝场刑,那么可以在Web瀏覽器中訪問localhost:8888/tree
,并查看Jupyter文件目錄蚪战。
安裝 findspark
findspark是一個Python庫牵现,?可以自動導(dǎo)入和像其他Python庫使用PySpark铐懊。還有其他選擇可以集成(為Spark創(chuàng)建一個jupyter配置文件),但是最新的findspark是更快更簡單的一個瞎疼。
要安裝findspark科乎,請運行以下命令:
已經(jīng)在jupyter虛擬環(huán)境中安裝了findpark。
創(chuàng)建第一個Spark應(yīng)用
要創(chuàng)建一個Spark應(yīng)用并使用數(shù)據(jù)制作酷炫的東西贼急,請在Jupyter單元格中運行以下腳本:
這個腳本只是初始化findspark茅茂,所以你可以導(dǎo)入PySpark作為一個庫,并用你的master URL和應(yīng)用名稱(個人決定)創(chuàng)建一個Spark Context實例竿裂。
為了測試效果玉吁,你可以在Jupyter notebook中顯示sc,并且會看到如下輸出:
當(dāng)運行長期的任務(wù)腻异,可以點擊鏈接并轉(zhuǎn)到應(yīng)用網(wǎng)站ui,這是非常有趣的这揣。
還應(yīng)連接到master服務(wù)器Web界面(localhost:8080
或<your_master_ip>:8080
)悔常,并在Running Applications部分中查看新內(nèi)容,如下所示:
要關(guān)閉master服務(wù)器和slave服務(wù)器给赞,請在Spark安裝目錄下運行以下命令:
要關(guān)閉jupyter虛擬環(huán)境机打,只需運行以下命令:
就這樣!
更多課程和文章盡在微信號:「datartisan數(shù)據(jù)工匠」