Spark 简介与安装部署
本教程為實驗樓原創,轉載請注明課程鏈接:https://www.shiyanlou.com/courses/456
?
?
1. 課程說明
?
本教程是實驗樓Spark大數據動手實驗訓練營第一節,登錄實驗樓官網可以獲得本節實驗的配套環境并學習全部章節。課程為純動手實驗教程,為了能說清楚實驗中的一些操作會加入理論內容。理論內容我們不會重復造輪子,太多牛人已經寫了太多好文章,會精選最值得讀的文章推薦給你,在動手實踐的同時扎實理論基礎。
?
課程共15個實驗,通過在線實驗的方式學習Spark相關的Scala,Streaming,SparkSQL,MLlib,GraphX,IndexedRDD,SparkR,Tachyon,KeystoneML等多個項目。課程隨到隨學,問題隨時在實驗樓問答中提出,與老師和同學一起交流。
?
2. Spark 概念
?
Spark是UC Berkeley AMP lab開發的一個集群計算的框架,類似于Hadoop,但有很多的區別(詳細見3.4)。最大的優化是讓計算任務的中間結果可以存儲在內存中,不需要每次都寫入HDFS,更適用于需要迭代的MapReduce算法場景中,可以獲得更好的性能提升。例如一次排序測試中,對100TB數據進行排序,Spark比Hadoop快三倍,并且只需要十分之一的機器。Spark集群目前最大的可以達到8000節點,處理的數據達到PB級別,在互聯網企業中應用非常廣泛(詳細見3.2)。
?
3. 本節閱讀
?
本節必讀的理論文章:
?
- 3.1 大數據技術生態介紹
?
寫的很好的一篇大數據技術生態圈介紹文章,層次條理分明,內容詳盡。推薦必讀。
?
- 3.2 誰在使用Spark?
?
這個頁面列舉了部分使用Spark的公司和組織,有使用場景的介紹,可做簡單了解。
?
- 3.3 Spark RDD原理詳解論文(英文)
?
最早的Spark論文之一,比起其他論文篇幅要短些,內容對理解Spark原理和內核很有價值,英文可以的話推薦閱讀。
?
- 3.4 Spark與Hadoop對比
?
這篇介紹是我看到過最詳盡的,講到很多Spark基本原理和對比Hadoop的優勢,推薦必讀。
?
4. 安裝
?
Spark雖然是大規模的計算框架,但也支持在單機上運行,實驗樓的實驗環境只提供一臺機器,所以后續實驗都會在單機上,但會提示與集群環境有哪些區別。對于入門學習者而言,單機環境已經足夠。
?
Spark安裝非常簡單,簡單到只需要下載binary包解壓即可,具體的步驟如下。
?
4.1 安裝前準備
?
安裝Spark之前需要先安裝Java,Scala及Python。
?
安裝Java
?
實驗樓環境中已經安裝了JDK,這里打開桌面上的Xfce終端,執行查看Java版本:
?
?
可以看到實驗樓的Java版本是1.8.0_60,滿足Spark 1.5.1對Java版本的要求。
?
如果需要自己安裝可以在Oracle的官網下載Java SE JDK,下載鏈接:http://www.oracle.com/technetwork/java/javase/downloads/index.html。
?
安裝Scala
?
老版本的Spark安裝前需要先裝Scala,1.5.1版本可以無需這一步驟。但為了自己開發Scala程序調試的方便我們仍然安裝一個最新版本2.11.7的Scala。
?
Scala官網下載地址:http://www.scala-lang.org/download/
?
?
由于官網速度很慢,我們預先上傳到了實驗樓內網,下載并解壓到/opt/目錄:
?
wget http://labfile.oss.aliyuncs.com/courses/456/scala-2.11.7.tgz tar zxvf scala-2.11.7.tgz sudo mv scala-2.11.7 /opt/?
測試scala命令,并查看版本:
?
?
安裝Python及IPython
?
安裝執行命令:
?
sudo apt-get update sudo apt-get install python ipython?
實驗樓中已經安裝了Python及IPython,分別查看版本:
?
?
4.2 Spark下載
?
課程中使用目前最新穩定版:Spark 1.5.1,官網上下載已經預編譯好的Spark binary,直接解壓即可。
?
Spark官方下載鏈接:http://spark.apache.org/downloads.html
?
下載頁面中我們如下圖選擇Pre-build for Hadoop 2.6 and later并點擊下載:
?
?
為了節約時間,我們選擇從阿里云的鏡像下載:
?
wget http://mirrors.aliyuncs.com/apache/spark/spark-1.5.1/spark-1.5.1-bin-hadoop2.6.tgz?
大約268M大小,下載完成后解壓并拷貝到/opt/目錄:
?
tar zxvf spark-1.5.1-bin-hadoop2.6.tgz sudo mv spark-1.5.1-bin-hadoop2.6 /opt/?
進入到spark目錄查看目錄結構,本節實驗中會用到bin/目錄下的操作命令以及conf/目錄下的配置文件。
?
4.3 配置路徑與日志級別
?
為了避免每次都輸入/opt/spark-1.5.1-bin-hadoop2.6這一串前綴,我們將必要的路徑放到PATH環境變量中(實驗樓用的是zsh,所以配置文件為~/.zshrc):
?
# 添加配置到zshrc echo "export PATH=$PATH:/opt/spark-1.5.1-bin-hadoop2.6/bin" >> ~/.zshrc# 使zshrc起作用 source ~/.zshrc# 測試下spark-shell的位置是否可以找到 which spark-shell?
我們進入到spark的配置目錄/opt/spark-1.5.1-bin-hadoop2.6/conf進行配置:
?
# 進入配置目錄 cd /opt/spark-1.5.1-bin-hadoop2.6/conf# 基于模板創建日志配置文件 cp log4j.properties.template log4j.properties# 使用vim或gedit編輯文件log4j.properties # 修改log4j.rootCategory為WARN, console,可避免測試中輸出太多信息 log4j.rootCategory=WARN, console# 基于模板創建配置文件 sudo cp spark-env.sh.template spark-env.sh# 使用vim或gedit編輯文件spark-env.sh # 添加以下內容設置spark的環境變量 export SPARK_HOME=/opt/spark-1.5.1-bin-hadoop2.6 export SCALA_HOME=/opt/scala-2.11.7?
spark-env.sh配置如圖:
?
?
spark-env.sh腳本會在啟動spark時加載,內容包含很多配置選項及說明,在以后的實驗中會用到少部分,感興趣可以仔細閱讀這個文件的注釋內容。
?
至此,Spark就已經安裝好了,Spark安裝很簡單,依賴也很少。
?
后續幾節介紹簡單的Spark操作,為以后的實驗做基礎。
?
4.4 Spark-Shell
?
Spark-Shell是Spark自帶的一個Scala交互Shell,可以以腳本方式進行交互式執行,類似直接用Python及其他腳本語言的Shell。
?
進入Spark-Shell只需要執行spark-shell即可:
?
spark-shell?
進入到Spark-Shell后可以使用Ctrl D組合鍵退出Shell。
?
在Spark-Shell中我們可以使用scala的語法進行簡單的測試,比如下圖所示我們運行下面幾個語句獲得文件/etc/protocols的行數以及第一行的內容:
?
?
上面的操作中創建了一個RDD file,執行了兩個簡單的操作:
?
- count()獲取RDD的行數
- first()獲取第一行的內容
?
我們繼續執行其他操作,比如查找有多少行含有tcp和udp字符串:
?
?
查看一共有多少個不同單詞的方法,這里用到Mapreduce的思路:
?
?
上面兩步驟我們發現,/etc/protocols中各有一行含有tcp與udp字符串,并且一共有243個不同的單詞。
?
上面每個語句的具體含義這里不展開,可以結合你閱讀的文章進行理解,后續實驗中會不斷介紹。Scala的語法我們在后續實驗中會單獨學習,這里僅僅是提供一個簡單的例子讓大家對Spark運算有基本認識。
?
操作完成后,Ctrl D組合鍵退出Shell。
?
pyspark
?
pyspark類似spark-shell,是一個Python的交互Shell。
?
執行pyspark啟動進入pyspark:
?
?
退出方法仍然是Ctrl D組合鍵。
?
也可以直接使用IPython,執行命令:IPYTHON=1 pyspark
?
?
在pyspark中,我們可以用python語法執行spark-shell中的操作,比如下面幾個語句獲得文件/etc/protocols的行數以及第一行的內容:
?
?
操作完成后,Ctrl D組合鍵退出Shell。
?
在后續的實驗中我們將大量使用python和scala的交互式shell,可以及時的獲得實驗結果,實驗重在理解原理,內容將很少涉及Java的內容,如果你對Java很熟悉可以參考后續的實驗代碼練習。
?
5. 啟動spark服務
?
這一節我們將啟動spark的master主節點和slave從節點,這里也會介紹spark單機模式和集群模式的部署區別。
?
5.1 啟動主節點
?
執行下面幾條命令啟動主節點:
?
# 進入到spark目錄 cd /opt/spark-1.5.1-bin-hadoop2.6# 啟動主節點 ./sbin/start-master.sh?
沒有報錯的話表示master已經啟動成功,master默認可以通過web訪問http://localhost:8080,打開桌面上的firefox瀏覽器,訪問該鏈接:
?
?
圖中所示,master中暫時還沒有一個worker,我們啟動worker時需要master的參數,該參數已經在上圖中標志出來:spark://7a1e9a46bf54:7077,請在執行后續命令時替換成你自己的參數。
?
5.2 啟動從節點
?
執行下面的命令啟動slave
?
./sbin/start-slave.sh spark://7a1e9a46bf54:7077?
沒有報錯表示啟動成功,再次刷新firefox瀏覽器頁面可以看到下圖所示新的worker已經添加:
?
?
也可以用jps命令查看啟動的服務,應該會列出Master和Slave。
?
5.3 測試實例
?
使用pyspark連接master再次進行上述的文件行數測試,如下圖所示,注意把MASTER參數替換成你實驗環境中的實際參數:
?
?
刷新master的web頁面,可以看到新的Running Applications,如下圖所示:
?
?
當退出pyspark時,這個application會移動到Completed Applications一欄。
?
可以自己點擊頁面中的Application和Workers的鏈接查看并了解相關信息。
?
5.4 停止服務
?
停止服務的腳本為sbin/stop-all.sh,運行時需要輸入shiyanlou用戶的密碼,因為腳本中使用ssh遠程對slave節點進行管理:
?
cd /opt/spark-1.5.1-bin-hadoop2.6 ./sbin/stop-all.sh?
5.5 集群部署
?
上面的步驟介紹了我們在單機狀態Standalone Mode下部署的spark環境,如果要部署spark集群稍有區別:
?
?
6. 總結
?
本節實驗中我們學習了以下內容,任何不清楚的地方歡迎到實驗樓問答與我們交流:
?
?
請務必保證自己能夠動手完成整個實驗,只看文字很簡單,真正操作的時候會遇到各種各樣的問題,解決問題的過程才是收獲的過程。
?
附:Spark大數據訓練營全部實驗列表
總結
以上是生活随笔為你收集整理的Spark 简介与安装部署的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 仿OpenStack开发云计算管理软件”
- 下一篇: 给缺少Python项目实战经验的人