编写目的
编写此文档的目的是为了在idea上 能够远程提交spark程序到集群中运行,避免上传jar包到linux中,同时也避免了编写相应的spark脚本执行文件。
实现功能
在idea的上编写spark程序,不编写脚本,直接在idea上运行,且程序在spark集群(standalone)上运行。
环境
1、 Spark集群(standalone模式)完全分布式
2、 你的项目工程可以访问hdfs上的文件
环境搭建方法
配置Spark集群的文件就在上面
配置成功后在浏览器上输入”主机名:8080”,如图1-1所示
图1-1 spark配置成功
配置关键点
1、 当spark集群启动成功后,开始编写spark代码,编写代码最重要的部分为获取SparkContext部分,下面的方法就是讲如何创建SparkContextdef 。
getSparkContext(appName:String):SparkContext = {
val sparkConf : SparkConf = new SparkConf()
.set(“spark.jars”, “E:\workspace-idea\bigdata\target\bigdata-1.0-SNAPSHOT.jar”)
.set(“spark.app.name”, appName)
.set(“spark.master”, “spark://bigdata1:7077”)
.set(“spark.driver.host”, “10.30.161.65”)
new SparkContext(sparkConf)
}
这样获取的方式和我们普通获取SparkContext可能有点不同,我们现在来细细的解释这是参数的含义。
spark.jars:打包程序后,jar包在Windows上的文件位置
spark.app.name:spark程序在运行时的名字
spark.master:master的访问路径,如“图1-1 spark配置成功”上展示的“访问路径”那样,图片中标识的那个就是master的访问路径。
spark.driver.host:这个地方只要填上你Windows本地的IP地址就可以了。
示例
下面我们提供了一个事例供您参考。
1、 创建一个获取SparkContext的方法,这里就不展示了,因为这里和上面的创建方法相同,你自己需要编写自己的方法
2、 编写相应的spark 程序
①获取数据到RDD中,首先将数据上传到HDFS上,数据如上文件所示。
def getSource(): RDD[String] ={
sc = SparkUtil.getSparkContext(SparkPractice.getClass.getSimpleName)
sc.textFile("/spark/sparkRDD/basicDate/sparkRDD.txt")
}
②编写具体的业务代码,模拟的业务为:一共有多个男生参加考试?
val studentInfoRDD = getSource()
val boyNums = studentInfoRDD
.map(x=>{
val student = x.split("\s+")
(student(1),student(3))
})
.filter(x=>“男”.equals(x._2))
.distinct
.count
sc.makeRDD(List(boyNums),1).saveAsTextFile("/spark/sparkRDD/practice2/out1/v3")
println(" 一共有"+boyNums+“个男生参加考试”)
代码编写完成后,先clean然后package,打包代码,运行你编写的spark程序就可以了。
运行成功时的截图如下。
等待程序运行结束就可以了。
注意
1、 如果你打包失败,可能是pom文件 中的scala-maven-plugin插件的版本过高,修改一下版本就可以了。下面是作者的scala-maven-plugin的版本,可作为参考。