IDEA 编译:Saprk 2.2 上的WordCount

本地编译

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

再次运行,成功!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值