15

मैं स्पार्क स्ट्रीमिंग और स्कैला में एक नौसिखिया हूं। एक परियोजना की आवश्यकता के लिए मैं ट्विटरपॉपुलर टैग उदाहरण को गिटूब में चलाने की कोशिश कर रहा था। चूंकि एसबीटी असेंबली मेरे लिए काम नहीं कर रही थी और मैं एसबीटी से परिचित नहीं था, मैं इमारत के लिए मेवेन का उपयोग करने की कोशिश कर रहा हूं। शुरुआती हिचकी के बाद, मैं जार फ़ाइल बनाने में सक्षम था। लेकिन इसे निष्पादित करने का प्रयास करते समय मुझे निम्न त्रुटि मिल रही है। क्या कोई इसे हल करने में मेरी मदद कर सकता है?

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/streaming/twitter/TwitterUtils$ 
    at TwitterPopularTags$.main(TwitterPopularTags.scala:43) 
    at TwitterPopularTags.main(TwitterPopularTags.scala) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:606) 
    at org.apache.spark.deploy.SparkSubmit$.launch(SparkSubmit.scala:331) 
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:75) 
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) 
Caused by: java.lang.ClassNotFoundException: org.apache.spark.streaming.twitter.TwitterUtils$ 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358) 
    ... 9 more 

मैं निर्भरता निम्नलिखित स्पार्क streaming_2.10 जोड़ लिया है: 1.1.0 स्पार्क core_2.10: 1.1.0 स्पार्क स्ट्रीमिंग-twitter_2.10: 1.1.0

मैं भी स्पार्क-स्ट्रीमिंग-ट्विटर के लिए 1.2.0 की कोशिश की लेकिन वह मुझे भी वही त्रुटि दे रहा था।

अग्रिम सहायता के लिए धन्यवाद।

सादर, vpv

उत्तर

2

यह त्रुटि का अर्थ है कि क्रम TwitterUtils वर्ग में (या स्केला में भाषा TwitterUtils वस्तु) प्रस्तुत नहीं किया गया है, फिर भी संकलन समय पर यह प्रस्तुत किया है (क्योंकि अन्यथा आप के लिए सक्षम नहीं होगा मेवेन के साथ निर्माण)। आपको यह सुनिश्चित करना चाहिए कि आपके द्वारा बनाई गई जार फ़ाइल में वास्तव में उस वर्ग/वस्तु शामिल है। वास्तव में क्या शामिल है यह देखने के लिए आप उस जार फ़ाइल को बस अनजिप कर सकते हैं। सबसे अधिक संभावना है कि आपकी मेवेन बिल्ड फ़ाइल परियोजना बनाने के लिए निर्भरता का उपयोग करती है लेकिन अंततः इसे आपके अंतिम जार में शामिल नहीं करती है।

15

अपना सुझाव देने के लिए धन्यवाद। मैं केवल एसबीटी असेंबली का उपयोग कर इस मुद्दे को हल करने में सक्षम था। मैंने यह कैसे किया है इसके बारे में विवरण निम्नलिखित है।

स्पार्क - पहले से ही क्लाउडेरा वीएम स्काला में मौजूद - सुनिश्चित नहीं हैं कि अगर यह क्लाउडेरा में मौजूद है, नहीं हम इसे एसबीटी स्थापित कर सकते हैं, तो - यह भी स्थापित किया जाना चाहिए। मैंने अपनी स्थानीय मशीन पर दोनों इंस्टॉल किए और जार को वीएम में स्थानांतरित कर दिया। इस स्थापित करने के लिए मैं नीचे दिए गए लिंक

https://gist.github.com/visenger/5496675

1) एक बार इन सब बनाई गई हैं प्रयोग किया जाता है। हमें अपने प्रोजेक्ट के लिए मूल फ़ोल्डर बनाना है। मैंने ट्विटर नामक एक फ़ोल्डर बनाया है।

2) निम्न संरचना ट्विटर/src/main/scala के साथ एक और फ़ोल्डर बनाएं और इस फ़ोल्डर में TwitterPopularTags.scala नाम के साथ .scala फ़ाइल बनाई है। इस कोड से थोड़ा बदलाव आया है जो हमें जिथब से मिला है। मैं इस के बाद आयात बयान

import org.apache.spark.streaming.Seconds 
import org.apache.spark.streaming.StreamingContext 
import org.apache.spark.streaming.StreamingContext._ 
import org.apache.spark.SparkContext._ 
import org.apache.spark.streaming.twitter._ 
import org.apache.spark.SparkConf 

3) बदलने के लिए, निम्न नाम

ट्विटर/परियोजना

साथ मूल फ़ोल्डर के तहत किसी अन्य फ़ोल्डर बना सकते हैं और नाम विधानसभा के साथ एक फ़ाइल बनाने के लिए किया था। एसबीटी असेंबली प्लगइन के लिए यह पथ है। फ़ाइल में पूरा कोड मौजूद है।

resolvers += Resolver.url("sbt-plugin-releases-scalasbt", url("http://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/")) 

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.12.0") 

4) एक बार उपरोक्त दो बनाई गई हैं, नाम build.sbt के साथ इस परियोजना (ट्विटर) की पेरेंट निर्देशिका में एक फ़ाइल बनाएँ। यह वह जगह है जहां हमें .jar फ़ाइल का नाम प्रदान करने की आवश्यकता है जिसे हमें बनाने और निर्भरताओं को भी बनाने की आवश्यकता है। कृपया ध्यान दें कि इस फ़ाइल में कोड के बीच खाली रेखाएं भी महत्वपूर्ण हैं।

name := "TwitterPopularTags" 

version := "1.0" 

mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) => 
    { 
    case PathList("META-INF", xs @ _*) => MergeStrategy.discard 
    case x => MergeStrategy.first 
    } 
} 

libraryDependencies += "org.apache.spark" %% "spark-core" % "1.1.0" % "provided" 

libraryDependencies += "org.apache.spark" %% "spark-streaming" % "1.1.0" % "provided" 

libraryDependencies += "org.apache.spark" %% "spark-streaming-twitter" % "1.2.0" 

libraryDependencies += "org.twitter4j" % "twitter4j-stream" % "3.0.3" 

resolvers += "Akka Repository" at "http://repo.akka.io/releases/" 

5) अंततः हमें टर्मिनल खोलना होगा और परियोजना (ट्विटर) के मूल फ़ोल्डर में जाना होगा। यहां से निम्न आदेश दर्ज करें:

sbt assembly 

यह निर्भरताओं को डाउनलोड करेगा और जार फ़ाइल की आवश्यकता होगी।

6) कार्यक्रम चलाने के लिए हमें हमारी आईडी के तहत बनाए गए ट्विटर एप की आवश्यकता है और ऑथ टोकन और अन्य विवरण प्रदान करें। इसे बनाने के तरीके पर विस्तृत कदम निम्नलिखित लिंक में मौजूद है।

http://ampcamp.berkeley.edu/3/exercises/realtime-processing-with-spark-streaming.html

7) एक बार हमारे पास सब से ऊपर किया हम काम चलाने के लिए वी एम से चिंगारी के लिये भेज आदेश का उपयोग कर सकते हैं। उदाहरण आदेश

./bin/spark-submit \ 
    --class TwitterPopularTags \ 
    --master local[4] \ 
    /path/to/TwitterPopilarTags.jar \ 
    comsumerkey consumersecret accesstoken accesssecret 

8) यह प्रिंट कंसोल के लिए उत्पादन तो उत्पादन पर नजर रखने के लिए यह बेहतर है कोड का समायोजन करके आवृत्ति कम करना है।

यदि कोई और विवरण आवश्यक है तो कृपया मुझे बताएं।

धन्यवाद & सादर,

VPV यह इस तरह से करने के लिए

+1

धन्यवाद में वर्णित, मैं एक ही समस्या थी। मैंने एक अन्य विषय पर उत्तर दिया: http://stackoverflow.com/a/28498443/1480391 उन लोगों के लिए जिन्हें अधिक जानकारी चाहिए .. :) –

+1

धन्यवाद @YvesM। , आपके जवाब ने वास्तव में मेरी मदद की - फिर से! मैंने आपके से बहुत सारे जवाब देखे जो मेरे जीवन को बचाया! – Paladini

0

प्रयास करें ...

./bin/spark-submit \ 
    --class TwitterPopularTags \ 
    --jars (external_jars like twitter4j,streaming-twitter) \ 
    --master local[4] \ 
    /path/to/TwitterPopilarTags.jar \ 

comsumerkey consumersecret accesstoken accesssecret

8

एक आसान समाधान (कि 1.5 के साथ काम करता मिला .1 निश्चित रूप से लेकिन शायद पुराने संस्करणों के साथ भी):

--packages पैरामीटर के साथ जमा करें और Maven, निर्देशांक की तरह:

spark-submit --master local[*] \ 
    --class TwitterStreaming \ 
    --packages "org.apache.spark:spark-streaming-twitter_2.10:1.5.1" \ 
    ${PATH_TO_JAR_IN_TARGET} 

http://spark.apache.org/docs/latest/programming-guide.html#using-the-shell

+0

ऐसा करने का सबसे आसान तरीका प्रतीत होता है। –

+1

@Marek Dudek, जब मैं --packages "org.apache.spark जोड़ता हूं: स्पार्क-स्ट्रीमिंग-ट्विटर_2.10: 1.5.1" थ्रेड में अपवाद "मुख्य" java.lang.NoClassDefFoundError: org/apache/spark/स्ट्रीमिंग/ट्विटर/ट्विटर अपवाद हल करता है लेकिन मुझे नया अपवाद मिला है "मुख्य" java.lang में अपवाद ..NoClassDefFoundError: org/apache/स्पार्क/लॉगिंग – user4342532

0
**I have the same problem and I am not able to fix** 


    name := "SentimentAnalyser" 

    version := "0.1" 

    scalaVersion := "2.11.11" 



    libraryDependencies += "org.apache.spark" % "spark-core_2.11" % "2.2.0" 

    // https://mvnrepository.com/artifact/org.apache.spark/park-streaming-twitter_2.11 

    // https://mvnrepository.com/artifact/org.apache.spark/spark-streaming_2.11 
    libraryDependencies += "org.apache.spark" % "spark-streaming-twitter_2.11" % "2.0.0" 
    libraryDependencies += "org.apache.spark" % "spark-streaming_2.11" % "2.2.0" 

    package com 

    import org.apache.spark.SparkConf 
    import org.apache.spark.streaming.{Seconds, StreamingContext} 
    import org.apache.spark.streaming.twitter.TwitterUtils 

    object Sentiment { 

     def main(args: Array[String]): Unit = { 

     if(args.length<4){ 
      System.out.print("Enter Consumer Key (API Key) Consumer Secret (API Secret)Access Token Access Token Secret") 
      System.exit(1); 
     } 

     val Array(customer_key,customer_secrect,access_token,access_token_secret)=args.take(4) 

     System.setProperty("twiteer4j.oauth.consumerKey",customer_key) 
     System.setProperty("twiteer4j.oauth.customerSecret",customer_secrect) 
     System.setProperty("twiteer4j.oauth.accessToken",access_token) 
     System.setProperty("twiteer4j.oauth.accessTokenSecret",access_token_secret) 

     val conf=new SparkConf().setAppName("Sentiment").setMaster("local") 
     val scc=new StreamingContext(conf,Seconds(30)) 
     //Dstream 
     val stream=TwitterUtils.createStream(scc,None) 

     val hashTag=stream.flatMap(status=>{status.getText.split(" ").filter(_.startsWith("#"))}) 

     val topHashTag60=hashTag.map((_,1)).reduceByKeyAndWindow(_+_,Seconds(60)) 
      .map{case (topic,count)=>(topic,count)}.transform(_.sortByKey(false)) 

     val topHashTag10=hashTag.map((_,1)).reduceByKeyAndWindow(_+_,Seconds(10)) 
      .map{case (topic,count)=>(topic,count)}.transform(_.sortByKey(false)) 


     topHashTag60.foreachRDD(rdd=>{ 
      val topList=rdd.take(10) 
      println("Popular topic in last 60 sec (%s total)".format(rdd.count())) 
      topList.foreach{case (count,tag)=>println("%s (%s tweets)".format(tag,count))} 
     }) 

     topHashTag10.foreachRDD(rdd=>{ 
      val topList=rdd.take(10) 
      println("Popular topic in last 10 sec (%s total)".format(rdd.count())) 
      topList.foreach{case (count,tag)=>println("%s (%s tweets)".format(tag,count))} 
     }) 


     scc.start() 
     scc.awaitTermination() 








     } 

    } 






I build jar using artifact in IJ .. 


spark-submit --class com.Sentiment /root/Desktop/SentimentAnalyser.jar XX XX XX XX 


ERROR: 
17/10/29 01:22:24 INFO BlockManager: Initialized BlockManager: BlockManagerId(driver, 192.168.46.132, 34179, None) 
17/10/29 01:22:27 WARN StreamingContext: spark.master should be set as local[n], n > 1 in local mode if you have receivers to get data, otherwise Spark jobs will not get resources to process the received data. 
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/streaming/twitter/TwitterUtils$ 
     at com.Sentiment$.main(Sentiment.scala:26) 
     at com.Sentiment.main(Sentiment.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:755) 
     at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:180) 
     at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:205) 
     at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:119) 
     at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) 
Caused by: java.lang.ClassNotFoundException: org.apache.spark.streaming.twitter.TwitterUtils$ 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java 
संबंधित मुद्दे