0
votes

I'm trying to find trending hashtags on twitter using Spark streaming.

os -> mac os

spark-version -> 2.2.1

scala-version -> 2.11.8

zeppelin-version -> 0.7.3

Above tools and versions I'm using. I have added three different jars to my zeppelin notebook:

twitter4j-core-4.0.4.jar

twitter4j-stream-4.0.4.jar

spark-streaming-twitter_2.10-1.0.0.jar

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

def setUpTwitter() = {
    import scala.io.Source
    for (line <- Source.fromFile("/Users/abhijeet/Documents/sparkscala/SparkScala/twitter.txt").getLines) {
        val fields = line.split(" ")
        if (fields.length == 2){
            System.setProperty("twitter4j.oauth." + fields(0), fields(1))
        }
    }
}
setUpTwitter()
val ssc = new StreamingContext(sc, Seconds(1))
def setupLogging() = {
    import org.apache.log4j.{Level, Logger}
    val rootLogger = Logger.getRootLogger()
    rootLogger.setLevel(Level.ERROR)
}
setupLogging()

Upto this point in code zeppelin worked fine

val tweets = TwitterUtils.createStream(ssc, None)

In above line it started throwing error

java.lang.NoClassDefFoundError: org/apache/spark/Logging
  at java.lang.ClassLoader.defineClass1(Native Method)
  at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
  at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
  at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
  at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
  at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
  at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
  at java.security.AccessController.doPrivileged(Native Method)
  at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
  at org.apache.spark.streaming.twitter.TwitterUtils$.createStream(TwitterUtils.scala:44)
  ... 56 elided
Caused by: java.lang.ClassNotFoundException: org.apache.spark.Logging
  at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
  ... 69 more

After that I found org.apache.spark.Logging is available in Spark version 1.5.2 or lower version. It is not in the 2.0.0.

My concern is I'm using Zeppelin. I have no pom file here or anything to change the version.

What is the way to resolve this error?

Any help would be greatly appreciated!

Thank you

1
github.com/linkedin/photon-ml/issues/189 logging has been removed from spark package so you will have to add external dependency for logging - Ramesh Maharjan
can you mention the name for that jar and the version that I'm supposed to use - arcticOak2
I'm using zeppelin and there is no maven or sbt. - arcticOak2
It's not working( mvnrepository.com/artifact/log4j/log4j/1.2.17 ). Is there anything above in my code that needs to be changed according to log4j or it would be the same - arcticOak2
Sorry I forget to acknowledge you because of the excitement. Thanks very much! - arcticOak2

1 Answers

1
votes

I found the solution by adding the jar

spark-core_2.11-1.5.2.logging.jar