<dependencies> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.12</artifactId> <version>3.0.0</version> </dependency> </dependencies> <build> <finalName>WordCount</finalName> <plugins> <plugin> <groupId>net.alchim31.maven</groupId> <artifactId>scala-maven-plugin</artifactId> <version>3.4.6</version> <executions> <execution> <goals> <goal>compile</goal> <goal>testCompile</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
编写一个简单的词频统计
/** * 词频统计 */ object WordCount { def main(args: Array[String]): Unit = { //创建 配置对象 val conf: SparkConf = new SparkConf().setAppName("wordcount").setMaster("yarn") //配置上下文对象 var sc: SparkContext = new SparkContext(conf) sc.textFile(args(0)) .flatMap(_.split(" ")) .map((_, 1)) .reduceByKey(_ + _) .saveAsTextFile(args(1)) //关闭 sc.stop() } }
将jar文件cp到主机上
[hui@hadoop103 spark-yarn]$ pwd /opt/module/spark-yarn [hui@hadoop103 spark-yarn]$ ll *.jar -rw-r--r-- 1 hui wd 4988 5月 21 2022 WordCount.jar运行程序
bin/spark-submit \ --class org.wdh01.spark01.WordCount \ --master yarn \ WordCount.jar \ /input \ /output参数说明
--class org.wdh01.spark01.WordCount 主类名 --master yarn yarn 模式:client 模式 WordCount.jar 运行的jar 文件 /input 输入目录 /output 输出目录:注意提交前确认输出路径是否存在,若存在,需要删除注意:如果运行发生压缩类没找到 spark on yarn会默认使用集群的编码方式,但是相关的jar包不会自动的添加,需要自己配置 方法1
拷贝lzo的包到spark的jars目录
cp /opt/module/hadoop-2.7.2/share/hadoop/common/hadoop-lzo-0.4.20.jar /opt/module/spark-yarn/jars方法2
在执行命令的时候指定lzo的包位置 --driver-class-path /opt/module/hadoop-2.7.2/share/hadoop/common/hadoop-lzo-0.4.20.jar
其实只程序测试通过了,打包在集群上运行其实很简单,只是可能会出现由于集群环境某些细微问题导致异常,这样就直接看下运行日志,根据日志提示解决解决就好。