У меня есть автономный кластер с одним узлом, на котором работает DataStax Enterprise 4.8 со Spark 1.4.1, в который я отправляю свое приложение в режиме кластера следующим образом:
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
) и его родители содержат только стандартные статические JAR-файлы, предоставляемые DataStax, расположенные под /usr/share/dse
, но ни одну из моих зависимостей.
Другой вывод заключался в том, что свойство конфигурации Spark (а также системное свойство) с именем spark.jars
содержит список этих JAR-файлов. Как они должны попасть в путь к классам?