一、操作流程
(1)构建maven项目
①选择maven项目,将Project SDK设置为1.8,然后从Create form archetype中选择scala-archetype-empty-RELEASE
②命名Project,然后将GroupId修改为org.flowpp(可选,此处为与flow公司的操作相一致),其他不需要修改
③选择maven版本,可直接选择本地下载安装的maven版本(maven3.6.1),其他参数不需要修改,即可创建项目。
(2)导入工作
scala SDK到Project Structure中的Global Libraries当中
设置project SDK为jdk1.8
(3)配置POM.xml文件,设置、、、
除了基础设置之外,其他可以沿用相同的代码架构
4.0.0
org.flowpp
demo
1.0-SNAPSHOT
2008
(4)逻辑代码书写
package com.flowpp.demo
import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession
object Demo {
def main(args: Array[String]): Unit = {
// val conf = new SparkConf().setAppName(“Demo”).setMaster(“local[*]”)
val conf = new SparkConf().setAppName(“Demo”)
val ss = SparkSession.builder().config(conf).enableHiveSupport().getOrCreate()
ss.sparkContext.setLogLevel(“error”)
val input = ss.sparkContext.textFile(“tmp/demo/wordcount.txt”)
val words = input.flatMap(line => line.split(" “))
val counts = words.map(word => (word, 1)).reduceByKey{case (x, y) => x + y}
// counts.saveAsTextFile(”")
// counts.foreach(line => println(line._1 + “:” + line._2))
counts.collect().foreach(line => println(line._1 + “:” + line._2))
ss.close()
}
}
(5)Maven操作:clean(清楚编译后目录,默认是target目录)、package(接受编译好的代码,打包成可发布的格式,如JAR)
maven打包操作完成过后,若项目生成target文件夹,并含如图所示的子文件夹和文件即可,特别是文件test-1.0-SNAPSHOT.jar,咱们可以打开该文件,查看文件内容
可重点关注MANIFEST.MF中的代码
(6)上传test-1.0-SNAPSHOT.jar至服务器本地
(7)spark-submit运行jar包
(8)利用Ambari网页界面后台观看HDFS和YARN的使用情况(主要),也可以借助Spark-2的History选项来观察历史运行记录
二、学习心得
1、spark-submit:主要是要将该代码的jar包提交到spark后来进行运行,因此本机上的JDK(1.8)、Scala(2.11.12)、Hadoop(2.7.1)需要与集群中的软件包版本保持一致
2、spark-shell:交互式程序运行,可以实时查看到代码的运行结果,与spark-submit不同之处在于spark-submit提交整个代码包,而spark-shell则依次提交结果;相同点在于均能实现相关的功能。
三、问题解决
(1)Mavens 无法打包
①注意版本:JDK(1.8)、Scala(2.11.12)、Hadoop(2.7.1)
②POM.xml文件配置:可参考文件POM模板(针对scala2.11.12).txt
4.0.0
org.flowpp
demo
1.0-SNAPSHOT
仅需要修改以上参数,该类参数在maven项目创建完成之后,即可生成相关参数
(2)spark-submit打包过程出现问题
[work@master ~]$ spark-submit demo-1.0-SNAPSHOT.jar
Error: No main class set in JAR; please specify one with --class
Run with --help for usage help or --verbose for debug output
在spark使用过程中,由于spark的底层代码由java(scala)组成,与java的代码运行机制类似,在运行过程中需要指定主类,否则无法正常执行
解决方法一:Maven指定class打包:配置方法
在POM.xml中的添加以下设置
maven-jar-plugin
3.0.2
com.flowpp.demo.Demo
true
lib/
解决方法二:spark-submit参数设置,如下所示
spark-submit --clsaa com.flowpp.demo.Demo demo-1.0-SNAPSHOT.jar
参数优先级:命令行设置>pom文件设置>maven默认参数
关于com.flowpp.demo.Demo的理解:可理解成路径
(3)test文件夹中的代码运行报错
如test/scala文件的scala运行报错的话,可以直接将这部分代码删掉
四、其他
1、文件权限:LINUX和HDFS遵循的文件权限协议posix,可系统地了解相关操作;
2、用户权限:在利用hdfs操作文件时,若出现文件的相关操作,可通过更改用户来进行相应操作,常利用命令sudo su hdfs进行,操作完成之后,调整回work目录,该问题在Hive创建数据表时出现过;
3、jar相关操作