Разъем Spark Mon go DB - Класс Def не найден - PullRequest
0 голосов
/ 17 июня 2020

Я столкнулся с проблемой при попытке чтения данных из Mon go DB.

У меня есть Spark 1.6.3, который имеет Scala 2.10.5

Я использую Mon go DB Connector Version 1.1 и пакет 2.10

Ниже приводится зависимости, которые я использовал в своем Mavan

<dependency> 
<groupId>org.mongodb.spark</groupId> 
<artifactId>mongo-spark-connector_2.10</artifactId> 
<version>1.1.0</version> 
</dependency> 

Получение ошибки, например

java.lang.NoClassDefFoundError: com/mongodb/spark/rdd/api/java/JavaMongoRDD
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:348)
        at org.apache.spark.util.Utils$.classForName(Utils.scala:175)
        at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:708)
        at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:181)
        at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:206)
        at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:121)
        at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: java.lang.ClassNotFoundException: com.mongodb.spark.rdd.api.java.JavaMongoRDD
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 

Но смог найти класс, существующий в ссылке

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Добавьте jar-файл mon go -spark-connector_2.10 в путь к классу времени выполнения

Это можно сделать следующими способами:

  • Добавить mon go - Spark-connector jar в папку Spark lib
  • spark-submit с --jars=/path/mongo-spark-connector.jar
  • spark.driver.extraClassPath или его псевдонимом --driver-class-path для установки дополнительных путей к классам на узле, на котором запущен драйвер.
  • spark.executor.extraClassPath, чтобы установить дополнительный путь к классам на рабочих узлах.

Если вы добавите путь к классам драйвера, вам нужно будет добавить пути к классам исполнителя, чтобы сделать jar доступным для исполнителя на рабочих узлах

Попробуйте использовать последнюю версию jar 2.2.8, которая должна иметь класс mon go -spark-connector_2.10: 2.2.8

0 голосов
/ 06 июля 2020

Причина этой проблемы:

Когда я пытаюсь построить с помощью Maven, я не использую сборку Fat Jar с помощью инструментов.

Вместо сборки Maven я попробовал следующее: создайте FAT Jar с помощью Eclipse File -> Export -> Runnable Jar -> Select Class, Jar file Name и выберите вариант 1 в обработке библиотеки. Затем нажмите Fini sh.

Это старый тип Jar, но он устранил проблему для меня.

Спасибо всем за помощь.

...