2016-05-08 4 views
4

Bitte beachten Sie, dass ich besser Dataminer als Programmierer bin. Ich versuche, Beispiele aus dem Buch "Advanced Analytics mit Spark" von Autor Sandy Ryza (diese Codebeispiele können von "https://github.com/sryza/aas" heruntergeladen werden), und ich laufe in das folgende Problem. Wenn ich dieses Projekt in Intelij Idee öffnen und versuchen, es auszuführen, erhalte ich Fehler "Ausnahme im Thread" main "java.lang.NoClassDefFoundError: org/apache/spark/rdd/RDD" Weiß jemand, wie man dieses Problem löst ?
Bedeutet das, dass ich falsche Version von Funken verwende?Ausnahme im Thread "Haupt" java.lang.NoClassDefFoundError: org/apache/spark/rdd/RDD

Zuerst, als ich versucht habe, diesen Code auszuführen, habe ich Fehler "Ausnahme im Thread" main "java.lang.NoClassDefFoundError: scala/product", aber ich löste es durch die Einstellung scala-lib in maven kompilieren. Ich benutze Maven 3.3.9, Java 1.7.0_79 und Scala 2.11.7, Spark 1.6.1. Ich habe sowohl Intelij Idea 14 als auch 15 verschiedene Versionen von Java (1.7), Scala (2.10) und Spark ausprobiert, aber ohne Erfolg. Ich verwende auch Windows 7. Meine SPARK_HOME und Path-Variablen sind festgelegt, und ich kann Spark-Shell von der Befehlszeile ausführen.

+0

Spark 1.6.1 compiles agains't 2.10.x, nicht 2.11.x. Haben Sie die richtigen Abhängigkeiten in Maven? Können Sie uns Ihre 'pom.xml' Datei zeigen? –

+0

POM wie ist orriginaly von github: – John

+0

Sorry für vorherigen Kommentar. POM-Datei wurde vom Autor dieses Buches gemacht, und es ist sehr große Datei, Ich kann es nicht auf dieser Seite wegen der Zeichenbeschränkung veröffentlichen. Der sicherste Weg ist, wenn Sie es von "https://github.com/sryza/aas" herunterladen, ich quess. Hinweis: Ich kann dieses POM mit Maven über den Befehl "mvn package" erfolgreich erstellen. – John

Antwort

1

Die Beispiele in diesem Buch zeigen ein - Master-Argument für Sparkshell, aber Sie müssen Argumente entsprechend Ihrer Umgebung angeben. Wenn Hadoop nicht installiert ist, müssen Sie die Spark-Shell lokal starten. Um die Probe führen Sie einfach Pfade zu lokaler Datei Verweise übergeben können (file: ///), anstatt eine HDFS Referenz (hdfs: //)

Der Autor deutet auf einen Hybrid-Entwicklungsansatz:

Keep the frontier of development in the REPL, and, as pieces of code harden, move them over into a compiled library.

Daher wird der Beispielcode als kompilierte Bibliotheken und nicht als eigenständige Anwendung betrachtet. Sie können das kompilierte JAR für Spark-Shell verfügbar machen, indem Sie es an die Eigenschaft --jars übergeben, während Maven zum Kompilieren und Verwalten von Abhängigkeiten verwendet wird.

In dem Buch beschreibt der Autor, wie die simplesparkproject ausgeführt werden kann:

Verwendung Maven das Projekt zu kompilieren und zu verpacken

cd simplesparkproject/ 
mvn package 

die Funkenschale mit den JAR-Abhängigkeiten starten

spark-shell --master local[2] --driver-memory 2g --jars ../simplesparkproject-0.0.1.jar ../README.md 

Dann können Sie auf Ihr Objekt innerhalb der Spark-Shell wie folgt zugreifen:

val myApp = com.cloudera.datascience.MyApp 

Wenn Sie jedoch den Beispielcode als eigenständige Anwendung ausführen und in idea ausführen möchten, müssen Sie die Datei pom.xml ändern. Einige der Abhängigkeiten werden für die Kompilierung benötigt, sind jedoch in einer Spark-Laufzeitumgebung verfügbar. Daher sind diese Abhängigkeiten mit einem Bereich gekennzeichnet, der in der pom.xml enthalten ist.

Sie können den bereitgestellten Bereich neu erstellen, als Sie in der Lage sein werden, die Beispiele innerhalb der Idee auszuführen. Aber Sie können dieses Glas nicht mehr als Abhängigkeit für die Funkenhülle bereitstellen.

Hinweis: Verwenden von Maven 3.0.5 und Java 7+. Ich hatte Probleme mit maven 3.3.X Version mit den Plugin-Versionen.