作者:锦瑟刻下两段缠绵 | 来源:互联网 | 2023-09-08 10:29
一、操作流程(1)构建maven项目①选择maven项目,将ProjectSDK设置为1.8,然后从Createformarchetype中选择scala-archetype-
一、操作流程 (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相关操作