-
預備知識
1、如果要跑spark例子程序,最好配置環境變量時,加入如下內容。
省區頻繁輸入調用jar包。
注意不同的spark版本,對應路徑不同。
2、修改配置文件(這裏針對standalone模式)
host文件:
Master(Master):127.0.0.1(名稱與IP對應關係)
slave1(Worker):127.0.0.1(名稱與IP對應關係)
slave2(Worker):127.0.0.1(名稱與IP對應關係)
注意:Master只有一個,slave有好幾個。
spark-env.sh文件:
按官方文檔要求設置Master,slave的配置參數
對於.sh腳本文件,設置後要用source命令讓其馬上生效。
slaves文件:
切記:spark根目錄下配置文件夾conf下的文件都是.template,即都是模板。
根據需要,我們要對其修改,修改後的文件後綴名就不是template了,是我們自己要求的格式。
爲了方便查看,建議複製文件,按照模板格式修改。
3、所有主機必須關閉防火牆。
-
spark運行shell和示例
-
spark支持四種語言:scala、java、python、R。對應分別有4中語言的版本。
-
注意加載時的路徑(公共目錄爲spark根目錄下的examples/src/main)、方式。
-
1、運行示例程序
-
1.1、運行scala、java示例程序
-
命令./bin/run-example <class> [params]
-
命令將調用spark-submit啓動程序。
-
1.2、運行python示例程序
-
命令./bin/spark-submit <.py> [params]
-
示例如:
./bin/spark-submit examples/src/main/python/pi.py 10
-
1.3
、運行
R
示例程序
-
命令:
./bin/spark-submit <.R> [params]
-
示例如:
./bin/spark-submit examples/src/main/r/dataframe.R
-
-
-
-
2、交互方式調用spark.(java不是腳本語言,所有沒有交互調用方式)
-
2.1、scala交互:調用./bin/spark-shell (--master local[n])
-
--master local[n]:明確master url即進行數量。
-
這裏master設置爲local本地,線程數量爲n.
-
默認情況下,master也爲local,線程數爲1.
-
更多關於spark-shell使用方法,參考--help.
-
-
-
2.2、python交互:調用./bin/pyspark (--master local[n])
-
參數設置同上。
-
2.3、R交互:調用./bin/sparkR (--master local[n])
-
參數設置同上。
-
-
-
-
spark處理過程
-
1、spark程序有兩個很重要的概念,或者說部件。
-
2、分別是sparkContext,RDD.
-
3、可以對應hadoop的map reduce函數來理解其重要性和執行順序,但實際上不是一回事。
-
4、spark啓動交互界面後會將source context簡化爲sc。
-
5、RDD是彈性分佈式數據集的簡寫,是spark處理數據的方式。
-
-
spark部署方式
-
1、Amazon EC2:啓動spark速度非常快,需要EC2腳本支持。
-
2、standalone:部署在私有集羣上最簡單的方式,便於程序開發和調試。
-
3、Apache mesos:更通用的方式,可以運行hadoop的map reduce程序和服務。
-
4、hadoop yarn:運行在yarn上(即mapreduce2.0版本)。
-
作爲個人開發測試,建議standalone方式。
-
-
spark部署方式、交互界面、IDE編程
-
1、部署是在本機或者集羣上,spark的佈置方式。決定程序的運行和資源調度方式。
-
2、交互界面是用scala、python、R等腳本語言,調用spark,實現某項小功能。
-
3、java是程序設計語言,同c/c++.不是腳本語言,所以不能用於交互編程。
-
4、IDE編程是編寫中大型程序是,爲了加快速度和效率,在IDE集成環境下,編寫基於spark的程序。
-
5、交互shell能快速看到運行結果,便於隨時修改;IDE便於代碼集成、打包.
-
這兩者在編程中經常穿插使用,提高開發效率。
-
-
spark處理過程
-
1、獲得外部數據
2、數據處理:用RDD API(包括transformation、actions)
2.1、轉換爲新數據(把外部數據)
2.2、啓動job(在cluster執行)
補充說明:
1、RDD API是spark最基本的API。RDD是彈性分佈式數據集Resilient Distributed Dataset。
2、在它之上更高級的API有machine learning API、DataFrame API.相比基本API,它們提供對數據更精確的操作。
-
spark程序調試幾個疑問
-
1、現象:java.net.ConnectException: Call From peter-HP-ENVY-Notebook/127.0.1.1 to localhost:9000 failed on connection exception: java.net.ConnectException: 拒絕連接。
可能原因:沒有訪問hdfs的權限,可能是端口設置問題。
可能是hdfs.xml文件設置問題。
也可能是防火牆問題。(在一臺機器上運行spark,應該不是防火牆)
2、示例程序(scala交互界面)中輸入README.md。
沒有設置文件路徑啊,在哪裏得到這個文件。
這個文件是在spark的根目錄下。
-
spark編譯兩種方式
-
1、sbt:需要聯網,需要git工具,編譯較慢。對應scala語言程序。
2、maven:需要聯網,需要maven工具,編譯較快。對應java語言程序。