🌀 技术人生
凡事有交代,件件有着落,事事有回音
在IDEA中使用Scala语言编写WordCount程序

1.使用IDEA创建Maven项目

2.导入pom.xml文件 <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <scala.version>2.11.8</scala.version> <spark.version>2.1.0</spark.version> <hadoop.version>2.6.0</hadoop.version> UTF-8 org.scala-lang scala-library ${scala.version} org.apache.spark spark-core_2.11 ${spark.version} org.apache.hadoop hadoop-client ${hadoop.version} net.alchim31.maven scala-maven-plugin 3.2.2 org.apache.maven.plugins maven-compiler-plugin 3.5.1 net.alchim31.maven scala-maven-plugin scala-compile-first process-resources add-source compile scala-test-compile process-test-resources testCompile org.apache.maven.plugins maven-compiler-plugin compile compile org.apache.maven.plugins maven-shade-plugin 2.4.3 package shade /:/ META-INF//.SF META-INF//.DSA META-INF//*.RSA

注意: 这里的Scala Spark Hadoop版本必须按照集群上的修改,特别是Scala和Spark的,要和你集群上的版本号一致,可以在Spark集群中使用Spark Shell模式查看版本号

3.编写WordCount程序 package cn.ysjh0014 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} object ScalaWordCount { def main(args: Array[String]): Unit = { //创建Spark配置,应用程序的名字 val conf = new SparkConf().setAppName(“ScalaWordCount”) //创建Spark程序执行的入口 val sc = new SparkContext(conf) //指定以后从哪读取数据创建RDD(弹性分布式数据集) val line = sc.textFile(args(0)) //切分压平 val word = line.flatMap(.split(" “)) //将单词和1组成元组 val WordOne = word.map((, 1)) //按照key进行聚合 val reduce = WordOne.reduceByKey(_ + ) //排序 val sort = reduce.sortBy(._2, false) //将结果保存到hdfs sort.saveAsTextFile(args(1)) //释放资源 sc.stop() } }

4.使用Maven打成jar包

在IDEA中view—->Tool Windows—>Maven Projects—>Package,jar包在target下,有两个jar包,original-Spark-1.0-SNAPSHOT.jar是只将代码打成了jar包,Spark-1.0-SNAPSHOT.jar是将所有依赖也打成了jar包

5.提交到Spark集群上测试 bin/spark-submit \ –master spark://cdh0:7077 \ –class cn.ysjh0014.ScalaWordCount \ 包名+项目名 /opt/package/original-Spark-1.0-SNAPSHOT.jar \ jar包所在目录 hdfs://cdh0:8020/usr/ys/input/test.txt \ 读取数据的hdfs路径 hdfs://cdh0:8020/usr/output 保存数据到hdfs的路径

6.查看运行结果

至此运行成功


最后修改于 2018-10-11

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。