您的位置:首页 > 其它

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

再次运行,成功!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: