簡體   English   中英

使用遠程jvm在紗線群集上提交Spark作業時發生異常

[英]Exception while submit spark job on yarn cluster with remote jvm

我正在使用下面的Java代碼在yarn-cluster上提交作業。

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;

}

作業正在提交到yarn-cluster,並且我能夠檢索應用程序ID,但是在Spark集群上運行作業時卻低於Exception。

 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中提到了此類。 看起來--addJars中提到的jar並未添加到驅動程序的spark上下文中。

難道我做錯了什么?? 任何幫助,將不勝感激。

您是否正在Cloudera的發行版上進行部署? CDH 5.4配置中的spark.yarn.jar對於本地文件具有'local:'前綴,但是Spark版本> = 1.5不喜歡這樣,您應該為spark程序集使用完整路徑名。 另請參閱此處

嘗試構建沒有Spark依賴項的JAR,並在Spark Submit中使用--jars傳遞依賴的jar。 大多數情況下,ClassNotFoundException是由於火花引起的,應用程序本身依賴於同一個jar。 建議的解決方案:

  1. 沒有依賴性的軟件包,並在spark-submit期間使用--jars添加依賴性jar
  2. 修改應用程序以使用與spark具有相同版本的第三方庫
  3. 在構建工具中使用陰影

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM