2016-05-08 4 views
4

Обратите внимание, что я лучше dataminer, чем программист. Я пытаюсь запустить примеры из книги «Расширенная аналитика с помощью Spark» от автора Sandy Ryza (эти примеры кода можно скачать с «https://github.com/sryza/aas»), и я столкнулся с следующей проблемой. Когда я открываю этот проект в Intelij Idea и пытаюсь запустить его, я получаю сообщение об ошибке «Исключение в потоке» main «java.lang.NoClassDefFoundError: org/apache/spark/rdd/RDD» Кто-нибудь знает, как решить эту проблему ?
Означает ли это, что я использую неправильную версию искры?Исключение из потока «main» java.lang.NoClassDefFoundError: org/apache/spark/rdd/RDD

Сначала, когда я пытался запустить этот код, у меня возникла ошибка «Исключение из потока» main «java.lang.NoClassDefFoundError: scala/product», но я решил это, установив scala-lib для компиляции в maven. Я использую Maven 3.3.9, Java 1.7.0_79 и scala 2.11.7, искра 1.6.1. Я попробовал как Intelij Idea 14, так и 15 различных версий java (1.7), scala (2.10) и искру, но безуспешно. Я также использую окна 7. Мои параметры SPARK_HOME и Path заданы, и я могу выполнить искровую оболочку из командной строки.

+0

Spark 1.6.1 компилирует agains't 2.10.x, not 2.11.x. Кроме того, есть ли у вас правильные зависимости, установленные в Maven? Можете ли вы показать нам свой файл 'pom.xml'? –

+0

POM as is orriginaly from github: – John

+0

Извините за предыдущий комментарий. Файл POM был составлен автором этой книги, и это очень большой файл, Я не могу опубликовать его на этом сайте из-за ограничения характера. Самый безопасный способ - загрузить его с «https://github.com/sryza/aas», я не знаю. Примечание. Я могу успешно построить этот POM с Maven с помощью команды «mvn package». – John

ответ

1

В примерах этой книги будет показан аргумент -master для sparkshell, но вам нужно будет указать аргументы, подходящие для вашей среды. Если у вас нет установленного Hadoop, вам нужно запустить искровую оболочку локально. Чтобы выполнить выборку, вы можете просто передать путь к локальной ссылке на файл (файл: ///), а не HDFS ссылка (HDFS: //)

Автора предложить подход развития гибрида:

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

Следовательно, код образцов рассматривается как скомпилированные библиотеки, а не как автономные приложения. Вы можете сделать скомпилированный JAR доступным для искровой оболочки, передав ее в свойство --jars, а maven используется для компиляции и управления зависимостями.

В книге автор описывает, как simplesparkproject может быть выполнен:

использование Maven для компиляции и пакета проекта

cd simplesparkproject/ 
mvn package 

запустить искровую-оболочку с зависимостями баночки

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

Затем вы можете получить доступ к объекту в искровой оболочке следующим образом:

val myApp = com.cloudera.datascience.MyApp 

Однако, если вы хотите выполнить образец кода как автономное приложение и выполнить его в рамках идеи, вам нужно изменить pom.xml. Некоторые из зависимостей необходимы для компиляции, но доступны в среде с искробезопасностью. Поэтому эти зависимости отмечены областью, указанной в pom.xml.

<!--<scope>provided</scope>--> 

Вы можете переделать предоставленный объем, чем сможете запустить образцы в рамках идеи. Но вы не можете обеспечить эту банку как зависимость от искровой оболочки больше.

Примечание: использование maven 3.0.5 и Java 7+. У меня были проблемы с версией maven 3.3.X с версиями плагина.

Смежные вопросы