Исключение при отправке задания искры в кластере пряжи с удаленным jvm

Я использую приведенный ниже код Java для отправки задания на пряжу-кластер.

public ApplicationId submitQuery(String requestId, String query,String fileLocations) {
    String driverJar = getDriverJar();
    String driverClass =  propertyService.getAppPropertyValue(TypeString.QUERY_DRIVER_CLASS);
    String driverAppName = propertyService.getAppPropertyValue(TypeString.DRIVER_APP_NAME);
    String extraJarsNeeded = propertyService.getAppPropertyValue(TypeString.DRIVER_EXTRA_JARS_NEEDED);

      String[] args = new String[] {
               // the name of your application
               "--name",
               driverAppName,

               // memory for driver (optional)
               "--driver-memory",
               "1000M",

               // path to your application's JAR file 
               // required in yarn-cluster mode      
               "--jar",
               "local:/home/ankit/Repository/Personalization/rtis/Cust360QueryDriver/target/SnapdealCustomer360QueryDriver-jar-with-selective-dependencies.jar",

               "--addJars",
               "local:/home/ankit/Downloads/lib/spark-assembly-1.3.1-hadoop2.4.0.jar,local:/home/ankit/.m2/repository/org/slf4j/slf4j-api/1.7.5/slf4j-api-1.7.5.jar,local:/home/ankit/.m2/repository/org/slf4j/slf4j-log4j12/1.7.5/slf4j-log4j12-1.7.5.jar",


               // name of your application's main class (required)
               "--class",
               driverClass,

               "--arg",
               requestId,

               "--arg",
               query,

               "--arg",
               fileLocations,

               "--arg",
               "yarn-client"
           };

      System.setProperty("HADOOP_CONF_DIR", "/home/hduser/hadoop-2.7.0/etc/hadoop");
      Configuration config = new Configuration();
      config.set("yarn.resourcemanager.address", propertyService.getAppPropertyValue(TypeString.RESOURCE_MANGER_URL));
      config.set("fs.default.name", propertyService.getAppPropertyValue(TypeString.FS_DEFAULT_NAME));

      System.setProperty("SPARK_YARN_MODE", "true");



      SparkConf sparkConf = new SparkConf();

      ClientArguments cArgs = new ClientArguments(args, sparkConf); 

      // create an instance of yarn Client client
       Client client = new Client(cArgs, config, sparkConf);

       ApplicationId id = client.submitApplication();

       return id;

}

Задание отправляется в пряжу-кластер, и я могу получить идентификатор приложения, но я получаю меньше исключения при выполнении задания на искровом кластере.

 Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/Logging
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
Caused by: java.lang.ClassNotFoundException: org.apache.spark.Logging
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        ... 13 more

хотя класс упоминается в /home/ankit/Downloads/lib/spark-assembly-1.3.1-hadoop2.4.0.jar. похоже, что jar, упомянутый в --addJars, не добавляется в контекст искры драйвера.

Я делаю что-то неправильно?? Любая помощь будет оценена по достоинству.


person ankit_tyagi    schedule 30.07.2015    source источник


Ответы (2)


Вы используете дистрибутив Cloudera? spark.yarn.jar в конфигурации CDH 5.4 имеет префикс «local:» для локальных файлов, но версии Spark >= 1.5 это не нравится, вы должны просто использовать полное имя пути для вашей сборки spark. См. также здесь.

person Francois G    schedule 28.01.2016

Попробуйте создать JAR без зависимости от искры и передать зависимые банки с --jars в отправке искры. В большинстве случаев ClassNotFoundException возникает из-за искры, а само приложение зависит от одной и той же банки. Предлагаемое решение:

  1. упаковать без зависимости и добавить зависимые банки с --jars во время spark-submit
  2. Измените приложение, чтобы использовать ту же версию сторонней библиотеки, что и у Spark.
  3. Используйте затенение в своем инструменте сборки
person Hari    schedule 07.07.2016