NoClassDefFoundError при запуске Spark в зависимости от jar neo4j (scala) - PullRequest
0 голосов
/ 29 апреля 2018

У меня есть программа, пытающаяся подключиться к базе данных Neo4j и запустить на Spark, testApp.scala, и я упаковываю ее, используя sbt package, чтобы упаковать ее в a.jar с зависимостями в соответствии с this_contribution (I уже есть neo4j-spark-connector-2.0.0-M2.jar)

resolvers += "Spark Packages Repo" at "http://dl.bintray.com/spark-packages/maven"
libraryDependencies += "neo4j-contrib" % "neo4j-spark-connector" % "2.0.0-M2"

Однако, хотя я пытался spark-submit --class "testApp" a.jar, оказывается, a NoClassDefFoundError

Exception in thread "main" java.lang.NoClassDefFoundError: org/neo4j/spark/Neo4j$ в коде val n = Neo4j(sc)

Есть еще 2 вещи, которые я должен упомянуть

1) Я использовал jar vtf для проверки содержимого в a.jar, в нем только testApp.class, в нем нет класса neo4j, но процесс упаковки прошел успешно (означает ли это neo4j-spark-connector-2.0.0-M2.jar не упакован в?)

2) Я могу использовать spark-shell --packages neo4j-contrib:neo4j-spark-connector:2.0.0-M2 и ввести код в testApp.scala, проблем нет (например, неправильная строка выше val n = Neo4j(sc), но она может работать в spark-shell)

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Поскольку содержимое в .jar не содержит класс Neo4j, это проблема упаковки.

Мы должны изменить sbt вместо sbt package, вместо этого мы должны использовать sbt clean assembly. Это помогает создать пакет .jar, содержащий все зависимости в нем.

Если вы используете только sbt package, процесс компиляции в порядке, но он не запакует neo4j-*.jar в ваш .jar. Таким образом, во время выполнения он выдает NoClassDefError

0 голосов
/ 29 апреля 2018

Вы можете попробовать использовать опцию --jars с spark-submit. Например

./bin/spark-submit --class "fully-qualified-class-name" --master "master-url" --jars "path-of-your-dependency-jar"

или вы также можете использовать spark.driver.extraClassPath="jars-class-path" для решения проблемы. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...