spark的運行方式——轉載
本文轉載自:http://smallx.me/2016/06/07/%E8%BF%90%E8%A1%8Cspark%E7%A8%8B%E5%BA%8F%E7%9A%84%E6%96%B9%E5%BC%8F/
本文主要講述運行spark程序的幾種方式,包括:本地測試、提交到集群運行、交互式運行 等。
在以下幾種執行spark程序的方式中,都請註意master的設置,切記。
運行自帶樣例
可以用 run-example 執行spark自帶樣例程序,如下:
./bin/run-example org.apache.spark.examples.SparkPi
|
或者同樣的:
run-example SparkPi |
交互運行
可以用 spark-shell 以交互方式執行spark代碼,這些操作都將由spark自動控制並以分布式處理的形式完成。首先,進入spark shell:
./bin/spark-shell
|
然後就可以直接執行spark代碼了。spark-shell非常適合學習API,初學的話多在裏面敲敲很好的。
- Spark Shell中已經默認將SparkContext類初始化為對象sc。用戶代碼如果需要用到,則直接應用sc即可,否則用戶自己再初始化,就會出現端口占用問題,相當於啟動兩個上下文。
- 在使用spark-shell時,可以通過 –driver-class-path 選項來指定所依賴的jar文件,多個jar文件之間使用分號”:”分割。
- 如果覺得spark-shell的日誌過多而影響觀看結果,可以配置一下日誌參數,將conf目錄下的log4j.properties.template復制一個並命名為log4j.properties,並修改其中的日誌等級就ok了。
本地運行測試
如果你是在windows上開發spark程序,然後提交到linux運行。那麽本地測試將會方便開發。
本地測試spark程序,需要將master設置為local[n]。同時註意:sc.textFile()可以加載本地文件而不一定是hdfs文件,這對於開發測試是非常方便的。
本地運行測試spark程序,既可以在IDE中進行,也可以手動在命令行中執行,參見我的linux下spark開發環境配置
windows本地測試時,需要用到hadoop的一個東東(winutils.exe),否則會出現異常。使用方法是:新建一個文件夾 D:\hadoop\bin\ 並將 winutils.exe 放入其中,並保證winutils.exe雙擊運行沒有報*.dll缺失的錯誤,然後
System.setProperty("hadoop.home.dir", "D:\\hadoop\\")
設置一下hadoop目錄即可。
提交到集群
可以用 spark-submit 提交任務到集群執行,如下(這裏我們指定了集群URL為spark standalone集群):
spark-submit --class 應用程序的類名 --master spark://master:7077 --jars 依賴的庫文件,多個包之間用逗號","分割 --executor-memory 2G --total-executor-cores 20 spark應用程序的jar包 你的應用程序需要的參數(即main方法的參數)
|
--master
參數指定集群URL,可以是獨立集群、YARN集群、Mesos集群,甚至是本地模式。見下表:
master可選值 | 描述 |
---|---|
spark://host:port | spark standalone集群,默認端口為7077。 |
yarn | YARN集群,當在YARN上運行時,需設置環境變量HADOOP_CONF_DIR指向hadoop配置目錄,以獲取集群信息。 |
mesos://host:port | Mesos集群,默認端口為5050。 |
local | 本地模式,使用1個核心。 |
local[n] | 本地模式,使用n個核心。 |
local[*] | 本地模式,使用盡可能多的核心。 |
- 如果jar包所需的依賴較少,通過
--jars
手動指定還可以,如果很多,最好使用構建工具打包。- 需要註意的是,你的spark程序需要打包成jar包,spark-submit會將程序包分發到各個worker節點,同時這些上傳到worker節點的文件,需要定時清理,否則會占用許多磁盤空間,如果運行於standalone模式,你可以設置 spark.worker.cleanup.appDataTtl 選項來讓spark自動清理這些文件。
- 其實安裝spark不需要安裝scala,因為 spark-assembly-1.2.0-hadoop2.4.0.jar 中已經自帶了scala庫。spark/bin/compute-classpath.sh 會自動將spark自帶的庫文件(spark-assembly-1.2.0-hadoop2.4.0.jar等)添加到classpath中,因此即使classpath和你的spark應用程序中都沒有指定spark庫文件路徑,你的spark應用程序照樣可以執行。
spark的運行方式——轉載