IDEA 编译:Saprk 2.2 上的WordCount
2017-08-10 10:22
218 查看
本地编译
IDEA需要添加scala插件,本机环境需要有scala环境本地: Scala 2.12
集群: Spark 2.11 Scala 2.11.8
在IDEA上创建Scala项目 最简单的WordCount代码 :
import org.apache.spark.{SparkConf, SparkContext} object WordCount { def main(args: Array[String]): Unit = { if (args.length < 2) { System.err.print("Usage: WordCount") System.exit(1) } val conf = new SparkConf() val sc = new SparkContext(conf) val line = sc.textFile(args(0)) //输出到文件 line.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _).saveAsTextFile(args(1)) //输出到屏幕 line.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _).collect().foreach(println) } }
注意:编写代码的时候需要导入一个依赖包:spark-assembly-1.6.3-hadoop2.6.0
!注意:这个依赖包原本是在 spark-hadoop.gz (就是官网下的Saprk下载地址),的lib之中,但是现在Saprk在2.0之后已经把lib文件夹拆分,对应的 Jar 依赖也找不到了,所以我们需要在旧版本的文件中寻找依赖,我用的是 Spark 1.6 版本下的依赖包!
在IDEA中选择 Project Stucture -> Libaries 选择添加依赖
在Artifactis中选择压缩成jar: Artifactis -> Jar ->From moudles…
这个都很简单
接着把对应生成的 jar 传入系统中的linux 里头。
记着要提前开启hadoop 和 spark 集群
使用以下命令:
./bin/spark-submit --master spark://192.168.244.129:7077 --class WordCount /home/hadoop/Public/scalaforspark.jar hdfs://192.168.244.129:9001/user/spark/wordcount/input/README.txt hdfs://192.168.244.129:9001/user/spark/wordcount/output
结果:
(package,1) (this,1) (Version"](http://spark.apache.org/docs/latest/building-spark.html#specifying-the-hadoop-version),1) (Because,1) (Python,2) (page](http://spark.apache.org/documentation.html).,1) (cluster.,1) ([run,1) (its,1) (YARN,,1) (have,1) (general,3) (pre-built,1) (locally,2) (locally.,1) (changed,1) (sc.parallelize(1,1) (only,1) (Configuration,1) ...
说下遇到的问题:
Exception in thread "main" java.lang.BootstrapMethodError: java.lang.NoClassDefFoundError: scala/runtime/java8/JFunction1$mcII$sp at com.henvealf.spark.learn.mapPartitonsTest$.main(mapPartitonsTest.scala:33) at com.henvealf.spark.learn.mapPartitonsTest.main(mapPartitonsTest.scala) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:736) at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:185) at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:210) at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:124) at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) Caused by: java.lang.NoClassDefFoundError: scala/runtime/java8/JFunction1$mcII$sp ... 11 more Caused by: java.lang.ClassNotFoundException: scala.runtime.java8.JFunction1$mcII$sp at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 11 more
这是由于版本不匹配造成的:
本地: Scala 2.12
集群: Spark 2.11 Scala 2.11.8
把本地的Scala 改成 2.11.8 重新打包, 记住要把原来的Scala 2.12 SDK 换成 Scala 2.11.8 SDK
再次运行,成功!
相关文章推荐
- idea wordcount
- hadoop2.7.3 编译运行WordCount.java
- idea利用scala编写wordcount 一些坑
- saprkStreaming NetworkWordCount案例
- hadoop搭建与编译运行wordcount例
- 「hadoop」win7 idea maven hadoop 运行WordCount示例
- hadoop学习过程-2013.08.22.2--hadoop1.2.1修改WordCount并编译
- hadoop 2.2.0 编译运行wordcount
- hadoop2.2使用手册2:如何运行自带wordcount
- 2.2hadoop伪分布式---Wordcount.java配置和运行
- Hadoop2.2 单机测试程序WordCount
- 在IDEA中编写Spark的WordCount程序
- Spark+scala+Idea wordcount 示例
- Hadoop MapReduce示例程序WordCount.java手动编译运行解析
- hadoop wordcount demo 编译、打包、运行(自己的经历)
- 运行hadoop的WordCount程序——编译,打包,运行
- IDEA【基本配置1】配置SBT 和 scala 并在spark环境中进行wordcount测试(spark集群运行模式)
- idea构建spark开发环境,并本地运行wordcount
- idea+maven+scala创建wordcount,打包jar并在spark on yarn上运行
- 修改《Spark快速大数据分析》的WordCount.java,使它通过maven编译,并在Spark2上运行