您的位置:首页 > 运维架构 > Apache

【SparkStreaming】java.lang.NoClassDefFoundError: org/apache/spark/streaming/StreamingContext

2020-07-15 04:17 141 查看

【问题描述】

       说一件很神奇的事情,今天在使用SparkStreaming进行Scala编程的时候,发生了如下问题:

[code]Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/streaming/StreamingContext
at com.xzw.sparkstreaming.KafkaToHBase$.main(KafkaToHBase.scala:27)
at com.xzw.sparkstreaming.KafkaToHBase.main(KafkaToHBase.scala)
Caused by: java.lang.ClassNotFoundException: org.apache.spark.streaming.StreamingContext
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
... 2 more

       从报错来看是没有发现那个类,这就奇怪了,代码中明明有这个类,而且还没有任何报错:

       小编的pom.xml中也导入了相应的依赖:

[code]<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_2.11</artifactId>
<version>2.4.0-cdh6.3.1</version>
<scope>provided</scope>
</dependency>

【解决方案】

       问题出现在:<scope>provided</scope>这里,这表示编译和测试时有效,并且该jar包在运行时由服务器提供。所以出错了,解决办法就简单了,直接在pom.xml文件中去掉这一行即可。

       在此也列举出附加依赖的集中弄范围,仅供参考:

[code]compile:默认值,适用于所有阶段(表明该jar包在编译、运行以及测试中路径俊可见),并且会随着项目直接发布。
provided:编译和测试时有效,并且该jar包在运行时由服务器提供。
runtime:运行时使用,对测试和运行有效。
test:只在测试时使用,在编译和运行时不起作用,发布项目时没有作用。
system:不依赖maven仓库解析,需要提供依赖的显式的置顶jar包路径。对项目的移植来说是不方便的。

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐