Окончательный статус Spark Jobs не работает в режиме кластера пряжи, если внутри класса не создан сеанс Spark - PullRequest
0 голосов
/ 09 мая 2018

У меня есть одна ситуация, когда в случае, если определенное условие не выполняется, нет необходимости создавать сеанс spark внутри класса, и приложение выходит с сообщением.

Я отправляю задание, как показано ниже, в режиме «пряжа-кластер»

spark2-submit --class com.test.TestSpark --master yarn --deploy-mode client /home/test.jar false

Окончательный статус задания "failed".

Но если то же самое выполняется в режиме "клиент-пряжа", задание spark успешно завершается.

Ниже приведен код:

package com.test;

import org.apache.spark.sql.SparkSession;

public class TestSpark {

    public static void main(String[] args) {
        boolean condition = false;
        condition = Boolean.parseBoolean(args[0]);
        if(condition){
            SparkSession sparkSession = SparkSession.builder().appName("Data Ingestion Framework")
                    .config("hive.metastore.warehouse.dir", "/user/hive/warehouse").config("spark.sql.warehouse.dir", "/user/hive/warehouse")
                    .enableHiveSupport()
                    .getOrCreate();
        }else{
        System.out.println("coming out no processing required");
        }

    }

}

В журналах для "yarn-cluster" я вижу, что создаются два конкатайнера, и один из них завершается с ошибкой ниже:

18/05/09 18:21:51 WARN security.UserGroupInformation: PriviledgedActionException as:*****<uername> (auth:SIMPLE) cause:java.io.FileNotFoundException: File does not exist: hdfs://hostname/user/*****<uername>/.sparkStaging/application_1525778267559_0054/__spark_conf__.zip
Exception in thread "main" java.io.FileNotFoundException: File does not exist: hdfs://hostname/user/*****<uername>/.sparkStaging/application_1525778267559_0054/__spark_conf__.zip
        at org.apache.hadoop.hdfs.DistributedFileSystem$20.doCall(DistributedFileSystem.java:1257)
        at org.apache.hadoop.hdfs.DistributedFileSystem$20.doCall(DistributedFileSystem.java:1249)
        at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)
        at org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:1249)
        at org.apache.spark.deploy.yarn.ApplicationMaster$$anonfun$4$$anonfun$apply$3.apply(ApplicationMaster.scala:198)
        at org.apache.spark.deploy.yarn.ApplicationMaster$$anonfun$4$$anonfun$apply$3.apply(ApplicationMaster.scala:195)
        at scala.Option.foreach(Option.scala:257)
        at org.apache.spark.deploy.yarn.ApplicationMaster$$anonfun$4.apply(ApplicationMaster.scala:195)
        at org.apache.spark.deploy.yarn.ApplicationMaster$$anonfun$4.apply(ApplicationMaster.scala:160)
        at org.apache.spark.deploy.yarn.ApplicationMaster$$anon$4.run(ApplicationMaster.scala:787)
        at java.security.AccessController.doPrivileged(Native Method)
        at javax.security.auth.Subject.doAs(Subject.java:422)
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1920)

Не могли бы вы объяснить, почему это происходит и как спарк обрабатывает создание контейнера.

1 Ответ

0 голосов
/ 25 мая 2018

Амит, это известная проблема, которая до сих пор остается открытой. https://issues.apache.org/jira/browse/SPARK-10795

Обходной путь должен инициализировать SparkContext.

package com.test;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.sql.SparkSession;

public class TestSpark {

    public static void main(String[] args) {
        boolean condition = false;
        condition = Boolean.parseBoolean(args[0]);
        if(condition){
            SparkSession sparkSession = SparkSession.builder().appName("Data Ingestion Framework")
                    .config("hive.metastore.warehouse.dir", "/user/hive/warehouse").config("spark.sql.warehouse.dir", "/user/hive/warehouse")
                    .enableHiveSupport()
                    .getOrCreate();
        }else{
            // Initialize a spark context to avoid failure : https://issues.apache.org/jira/browse/SPARK-10795
            JavaSparkContext sparkContext = new JavaSparkContext(new SparkConf());
            System.out.println("coming out no processing required");
        }

    }
...