编写步骤
- 引入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核数,具体的提交参数,可参考官方文档
下载
源码下载地址
原创,转载请注明来自