2016-02-13 4 views
1

Я один узел автономного кластера работает DataStax Enterprise 4.8 с искрой 1.4.1, к которому я представить мое приложение в режиме кластера, как это:Driver без представленных классов JAR-файлов - ClassNotFoundException

dse spark-submit \ 
    --class MyApp \ 
    --master spark://MY-IP:6066 \ 
    --deploy-mode cluster \ 
    --packages LIST-OF-MY-DEPENDECIES \ 
    MyApp.jar 

Это, кажется, работает как это должен. Он загружает все JAR для всех транзитивных зависимостей в локальный Maven и запускает мое приложение, однако эти JAR-файлы не находятся в пути к классам.

object MyApp { 
    def main(args: Array[String]): Unit = { 
    // This fails with: ClassNotFoundException 
    getClass.getClassLoader.loadClass("akka.cluster.Cluster$") 
    } 
} 

я обнаружил, что загрузчик классов (org.apache.spark.util.MutableURLClassLoader) и его родители содержат только стандартные статические JARs обеспеченных DataStax, расположенных под /usr/share/dse, но ни один из моих зависимостей.

Другой вывод состоял в том, что свойство конфигурации Spark (а также системное свойство) с именем spark.jars содержит список этих JAR. Как они должны добраться до класса?

ответ

0

Самый простой способ предоставить всем водителям и исполнителям доступ к вашим зависимостям состоит в том, чтобы все они были упакованы в один uber jar.

Это вариант для вас?

Для этого доступно несколько вариантов. Если вы используете sbt, вероятно, наиболее хорошо знаете sbt-assembly.

Если вы хотите пойти с отдельными маленькими банками, возможно, вам понадобится SparkContext.addjar(path: String). Вам просто нужно убедиться, что ваш путь находится либо в общей файловой системе (например, HDFS), либо в локальном каталоге, который является общим/реплицированным для всех узлов кластера.

+0

Примечание: Я использовал второй подход, поэтому дайте мне знать, если с ним возникла проблема, я могу присмотреться. – marios

+0

Uber jar проблематичен из-за конфликтующих файлов ресурсов - перезаписывает reference.conf, а также становится довольно большим (100 + МБ). SparkContext.addjar не решает проблему. В самой первой строке основного метода требуется JAR для пути к классам. Но ваш совет - всего лишь обходной путь. Я хотел бы знать, почему мой подход не работает. благодаря –

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