編寫步驟
- 引入spark庫
這裏使用maven
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.3.3</version>
</dependency>
- 導入庫
import org.apache.spark.SparkContext
import org.apache.spark.SparkConf
- 初始化Context
val conf = new SparkConf().setAppName(appName).setMaster(master)
val sc = new SparkContext(conf)
-
執行變換和操作
-
關閉Context
本地測試
這指定master爲local[*] input和output路徑爲本地路徑,編寫代碼如下
object App {
def main(args : Array[String]) {
val master = "local[*]"
val input = "/Users/wenzhou/Tmp/word.data"
val output = "/Users/wenzhou/Tmp/mrout"
val conf = new SparkConf();
conf
.setAppName("wenzhou_tmp");
val sc = new SparkContext(conf);
sc
.textFile(input)
.flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_)
.saveAsTextFile(output)
sc.stop();
}
}
直接本地編譯執行,成功,即本次測試成功,相對hadoop的MR這樣非常易於測試使用。
提交集羣運行
提交集羣使用我們修改上述的master和input/output如下,然後打包成jar。
val master = "spark://wenzhoudeMacBook-Pro.local:7077"
val input = "hdfs://localhost:9000/data/word.data"
val output = "hdfs://localhost:9000/mrout"
這裏通過spark-submit來提交jar來執行,格式如下
./bin/spark-submit \
--class <main-class> \
--master <master-url> \
--deploy-mode <deploy-mode> \
--conf <key>=<value> \
... # other options
<application-jar> \
[application-arguments]
- –class 指定main class
- –deploy-mode DriverProgram運行在client 還是cluster(Worker Node)上,默認client
- –master 指定master機器,client部署時默認爲7077端口,cluster部署時必須爲REST接口,默認6066端口,集羣運行時必須用此參數指定
- –conf 指定配置,覆蓋默認
比如這裏,client(deploy-mode)部署時,執行如下命令
bin/spark-submit --class org.jimwen.App --master spark://wenzhoudeMacBook-Pro.local:7077 ./SimpleSpark-1.0-SNAPSHOT.jar
cluster部署時,執行如下命令
bin/spark-submit --class org.jimwen.App --master spark://wenzhoudeMacBook-Pro.local:6066 --deploy-mode cluster ./SimpleSpark-1.0-SNAPSHOT.jar
這裏使用的standlone集羣演示,提交yarn集羣時指定master=yarn即可。
此外還可以指定執行時的內存/cpu核數,具體的提交參數,可參考官方文檔
下載
源碼下載地址
原創,轉載請註明來自