Я один узел автономного кластера работает 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. Как они должны добраться до класса?
Примечание: Я использовал второй подход, поэтому дайте мне знать, если с ним возникла проблема, я могу присмотреться. – marios
Uber jar проблематичен из-за конфликтующих файлов ресурсов - перезаписывает reference.conf, а также становится довольно большим (100 + МБ). SparkContext.addjar не решает проблему. В самой первой строке основного метода требуется JAR для пути к классам. Но ваш совет - всего лишь обходной путь. Я хотел бы знать, почему мой подход не работает. благодаря –