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

【問題描述】

       說一件很神奇的事情,今天在使用SparkStreaming進行Scala編程的時候,發生瞭如下問題:

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中也導入了相應的依賴:

<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文件中去掉這一行即可。

       在此也列舉出附加依賴的集中弄範圍,僅供參考:

compile:默認值,適用於所有階段(表明該jar包在編譯、運行以及測試中路徑俊可見),並且會隨着項目直接發佈。
provided:編譯和測試時有效,並且該jar包在運行時由服務器提供。
runtime:運行時使用,對測試和運行有效。
test:只在測試時使用,在編譯和運行時不起作用,發佈項目時沒有作用。
system:不依賴maven倉庫解析,需要提供依賴的顯式的置頂jar包路徑。對項目的移植來說是不方便的。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章