2016-08-29 24 views
5

Jestem nowy w Spark. Próbowałem uruchomić aplikację Spark (.jar) na CDH 5.8.0-0 na Oracle VirtualBox 5.1.4r110228, która wykorzystała Spark Steaming do wykonania analizy sentymentów na twitterze. Mam utworzone konto twitter i wygenerowałem wszystkie wymagane (4) tokeny. Zostałem zablokowany przez wyjątek NoClassDefFoundError.Wyjątek w wątku "główny" java.lang.NoClassDefFoundError: org/apache/spark/Logging

Przeszukałem kilka dni. Najlepszą radą, jaką znalazłem do tej pory, był adres URL poniżej, ale najwyraźniej moje środowisko wciąż czegoś brakuje.

http://javarevisited.blogspot.com/2011/06/noclassdeffounderror-exception-in.html#ixzz4Ia99dsp0

Co to znaczy przez biblioteki pojawił się na kompilacji przez zaginął w czasie wykonywania? Jak możemy to naprawić?

Co to jest biblioteka logowania? Natknąłem się na artykuł stwierdzający, że rejestrowanie może zostać wycofane. Poza tym widzę log4j w moim środowisku.

W moim CDH 5.8, biegnę te wersje oprogramowania: Spark-2.0.0-bin-hadoop2.7/zapłonem core_2.10-2.0.0 jdk-8u101-linux-x64/JRE -bu101-linux-x64

Dołączyłem szczegóły wyjątku na końcu. Oto procedura Przeprowadziłem wykonać aplikację i jakąś weryfikację zrobiłem po uderzeniu wyjątek:

  1. Rozpakuj twitter-streaming.zip (aplikacja Spark)
  2. cd twitter-strumieniowe
  3. bieg ./ SBT/SBT montaż
  4. Aktualizacja env.sh z konta Twitter

$ cat env.sh

export SPARK_HOME=/home/cloudera/spark-2.0.0-bin-hadoop2.7 
export CONSUMER_KEY=<my_consumer_key> 
export CONSUMER_SECRET=<my_consumer_secret> 
export ACCESS_TOKEN=<my_twitterapp_access_token> 
export ACCESS_TOKEN_SECRET=<my_twitterapp_access_token> 

Skrypt submit.sh opakowane polecenia zapłonie przedstawienia informacji o wymaganych poświadczeń w env.sh:

$ cat submit.sh

source ./env.sh 
$SPARK_HOME/bin/spark-submit --class "TwitterStreamingApp" --master local[*] ./target/scala-2.10/twitter-streaming-assembly-1.0.jar $CONSUMER_KEY $CONSUMER_SECRET $ACCESS_TOKEN $ACCESS_TOKEN_SECRET 

dziennika z procesu montażu: [Cloudera @quickstart twitter strumieniowanie] $ ./sbt/sbt montaż

Launching sbt from sbt/sbt-launch-0.13.7.jar 
[info] Loading project definition from /home/cloudera/workspace/twitter-streaming/project 
[info] Set current project to twitter-streaming (in build file:/home/cloudera/workspace/twitter-streaming/) 
[info] Including: twitter4j-stream-3.0.3.jar 
[info] Including: twitter4j-core-3.0.3.jar 
[info] Including: scala-library.jar 
[info] Including: unused-1.0.0.jar 
[info] Including: spark-streaming-twitter_2.10-1.4.1.jar 
[info] Checking every *.class/*.jar file's SHA-1. 
[info] Merging files... 
[warn] Merging 'META-INF/LICENSE.txt' with strategy 'first' 
[warn] Merging 'META-INF/MANIFEST.MF' with strategy 'discard' 
[warn] Merging 'META-INF/maven/org.spark-project.spark/unused/pom.properties' with strategy 'first' 
[warn] Merging 'META-INF/maven/org.spark-project.spark/unused/pom.xml' with strategy 'first' 
[warn] Merging 'log4j.properties' with strategy 'discard' 
[warn] Merging 'org/apache/spark/unused/UnusedStubClass.class' with strategy 'first' 
[warn] Strategy 'discard' was applied to 2 files 
[warn] Strategy 'first' was applied to 4 files 
[info] SHA-1: 69146d6fdecc2a97e346d36fafc86c2819d5bd8f 
[info] Packaging /home/cloudera/workspace/twitter-streaming/target/scala-2.10/twitter-streaming-assembly-1.0.jar ... 
[info] Done packaging. 
[success] Total time: 6 s, completed Aug 27, 2016 11:58:03 AM 

Nie wiem dokładnie, co to znaczy, ale wszystko wyglądało dobrze, kiedy wpadłem Hadoop NativeCheck:

$ Hadoop checknative -a

16/08/27 13:27:22 INFO bzip2.Bzip2Factory: Successfully loaded & initialized native-bzip2 library system-native 
16/08/27 13:27:22 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library 
Native library checking: 
hadoop: true /usr/lib/hadoop/lib/native/libhadoop.so.1.0.0 
zlib: true /lib64/libz.so.1 
snappy: true /usr/lib/hadoop/lib/native/libsnappy.so.1 
lz4:  true revision:10301 
bzip2: true /lib64/libbz2.so.1 
openssl: true /usr/lib64/libcrypto.so 

Oto log konsola mojego wyjątkiem: $ ./submit.sh

Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties 
16/08/28 20:13:23 INFO SparkContext: Running Spark version 2.0.0 
16/08/28 20:13:24 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 
16/08/28 20:13:24 WARN Utils: Your hostname, quickstart.cloudera resolves to a loopback address: 127.0.0.1; using 10.0.2.15 instead (on interface eth0) 
16/08/28 20:13:24 WARN Utils: Set SPARK_LOCAL_IP if you need to bind to another address 
16/08/28 20:13:24 INFO SecurityManager: Changing view acls to: cloudera 
16/08/28 20:13:24 INFO SecurityManager: Changing modify acls to: cloudera 
16/08/28 20:13:24 INFO SecurityManager: Changing view acls groups to: 
16/08/28 20:13:24 INFO SecurityManager: Changing modify acls groups to: 
16/08/28 20:13:24 INFO SecurityManager: SecurityManager: authentication disabled; ui acls disabled; users with view permissions: Set(cloudera); groups with view permissions: Set(); users with modify permissions: Set(cloudera); groups with modify permissions: Set() 
16/08/28 20:13:25 INFO Utils: Successfully started service 'sparkDriver' on port 37550. 
16/08/28 20:13:25 INFO SparkEnv: Registering MapOutputTracker 
16/08/28 20:13:25 INFO SparkEnv: Registering BlockManagerMaster 
16/08/28 20:13:25 INFO DiskBlockManager: Created local directory at /tmp/blockmgr-37a0492e-67e3-4ad5-ac38-40448c25d523 
16/08/28 20:13:25 INFO MemoryStore: MemoryStore started with capacity 366.3 MB 
16/08/28 20:13:25 INFO SparkEnv: Registering OutputCommitCoordinator 
16/08/28 20:13:25 INFO Utils: Successfully started service 'SparkUI' on port 4040. 
16/08/28 20:13:25 INFO SparkUI: Bound SparkUI to 0.0.0.0, and started at http://10.0.2.15:4040 
16/08/28 20:13:25 INFO SparkContext: Added JAR file:/home/cloudera/workspace/twitter-streaming/target/scala-2.10/twitter-streaming-assembly-1.1.jar at spark://10.0.2.15:37550/jars/twitter-streaming-assembly-1.1.jar with timestamp 1472440405882 
16/08/28 20:13:26 INFO Executor: Starting executor ID driver on host localhost 
16/08/28 20:13:26 INFO Utils: Successfully started service 'org.apache.spark.network.netty.NettyBlockTransferService' on port 41264. 
16/08/28 20:13:26 INFO NettyBlockTransferService: Server created on 10.0.2.15:41264 
16/08/28 20:13:26 INFO BlockManagerMaster: Registering BlockManager BlockManagerId(driver, 10.0.2.15, 41264) 
16/08/28 20:13:26 INFO BlockManagerMasterEndpoint: Registering block manager 10.0.2.15:41264 with 366.3 MB RAM, BlockManagerId(driver, 10.0.2.15, 41264) 
16/08/28 20:13:26 INFO BlockManagerMaster: Registered BlockManager BlockManagerId(driver, 10.0.2.15, 41264) 
Exception in thread "main" 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)I 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    at org.apache.spark.streaming.twitter.TwitterUtils$.createStream(TwitterUtils.scala:44) 
    at TwitterStreamingApp$.main(TwitterStreamingApp.scala:42) 
    at TwitterStreamingApp.main(TwitterStreamingApp.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:729) 
    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.ClassNotFoundException: org.apache.spark.Logging 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 23 more 
16/08/28 20:13:26 INFO SparkContext: Invoking stop() from shutdown hook 
16/08/28 20:13:26 INFO SparkUI: Stopped Spark web UI at http://10.0.2.15:4040 
16/08/28 20:13:26 INFO MapOutputTrackerMasterEndpoint: MapOutputTrackerMasterEndpoint stopped! 
16/08/28 20:13:26 INFO MemoryStore: MemoryStore cleared 
16/08/28 20:13:26 INFO BlockManager: BlockManager stopped 
16/08/28 20:13:26 INFO BlockManagerMaster: BlockManagerMaster stopped 
16/08/28 20:13:26 INFO OutputCommitCoordinator$OutputCommitCoordinatorEndpoint: OutputCommitCoordinator stopped! 
16/08/28 20:13:26 INFO SparkContext: Successfully stopped SparkContext 
16/08/28 20:13:26 INFO ShutdownHookManager: Shutdown hook called 
16/08/28 20:13:26 INFO ShutdownHookManager: Deleting directory /tmp/spark-5e29c3b2-74c2-4d89-970f-5be89d176b26 

rozumiem mój post był długotrwały. Twoja rada lub spostrzeżenia są wysoko cenione!

-jsung8

+1

Błąd mówi, że w czasie wykonywania nie można znaleźć klasy Logging do załadowania w pakiecie org.apache.spark. Ta klasa po prostu brakuje w twitter-streaming-assembly-1.0.jar. Upewnij się, że po zbudowaniu idzie do słoika. Czy podczas tworzenia tego przykładu jest tworzony inny słoik? –

+2

To może pomóc: http://stackoverflow.com/a/39194820/2873538 –

+1

@amit_kumar & Ajeets To naprawdę wygląda obiecująco! Dziękuję bardzo za kierunek i link !! Chociaż porady na temat postu "287358" są dość jasne, wyzwaniem jest dla mnie zidentyfikowanie odpowiedniego pliku pom.xml do edycji, a także pobranie/skonfigurowanie Sparka 1.6.2. Znalazłem pół tuzina plików pom.xml związanych z nazwami w katalogu twitter-stream ... Będę się bawić i dzielić tym, co znalazłem. – jsung8

Odpowiedz

0

org/apache/iskry/rejestrowania usunięto po iskry 1.5.2.

Ponieważ iskra-core wersja 2.0, a następnie Najprostszym rozwiązaniem jest:

download a single spark-core_2.11-1.5.2.logging.jar and put it in the jars directory under your spark root directory.

W każdym razie, to rozwiązuje mój problem, mam nadzieję, że to pomaga.

+0

, gdzie go znaleźć? Czy masz link? –

+0

@romainjouin: przepraszam, brak linku tam. Właśnie przedyskutowałem to z moim partnerem. –

0

Jednym z powodów, które mogą powodować ten problem, jest lib i konflikt klas. I w obliczu tego problemu i rozwiązać go za pomocą kilku Maven wykluczenia:

<dependency> 
     <groupId>org.apache.spark</groupId> 
     <artifactId>spark-core_2.11</artifactId> 
     <version>2.0.0</version> 
     <scope>provided</scope> 
     <exclusions> 
      <exclusion> 
       <groupId>log4j</groupId> 
       <artifactId>log4j</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.spark</groupId> 
     <artifactId>spark-streaming_2.11</artifactId> 
     <version>2.0.0</version> 
     <scope>provided</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.apache.spark</groupId> 
     <artifactId>spark-streaming-kafka-0-10_2.11</artifactId> 
     <version>2.0.0</version> 
     <exclusions> 
      <exclusion> 
       <groupId>org.slf4j</groupId> 
       <artifactId>slf4j-log4j12</artifactId> 
      </exclusion> 
      <exclusion> 
       <groupId>log4j</groupId> 
       <artifactId>log4j</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 
0

Zastosowanie: spark-core_2.11-1.5.2.jar

miałem ten sam problem opisany przez @ jsung8 i starał się znaleźć .jar sugerowanego przez @youngstephen ale nie móc. Jednak połączenie w spark-core_2.11-1.5.2.jar zamiast spark-core_2.11-1.5.2.logging.jar rozwiązało wyjątek w sposób sugerowany przez @youngstephen.

0

Używasz starej wersji złącza Spark na Twitterze. Ta klasa z podpowiedzi śledzenia stosu:

org.apache.spark.streaming.twitter.TwitterUtils 

Spark usunął tę integrację w wersji 2.0. Używasz tej ze starej wersji Sparka, która odwołuje się do starej klasy Logging, która została przeniesiona do innej paczki w Sparku 2.0.

Jeśli chcesz używać Spark 2.0, musisz użyć konektora Twittera z projektu Bahir.

0

Spark rdzeń wersja powinna zostać obniżona do 1,5 ze względu na poniżej błędu

java.lang.NoClassDefFoundError: org/apache/spark/Logging 

http://bahir.apache.org/docs/spark/2.0.0/spark-streaming-twitter/ zapewnia lepsze rozwiązanie tego problemu. Dodając poniższą zależność, mój problem został rozwiązany.

<dependency> 
<groupId>org.apache.bahir</groupId> 
<artifactId>spark-streaming-twitter_2.11</artifactId> 
<version>2.0.0</version> 
</dependency> 
Powiązane problemy