Spark Submit Не удалось запустить Java Spark Job с доступом к AWS S3 [метод NoSuch: ProviderUtils.excludeIncompatibleCredentialProviders] - PullRequest
0 голосов
/ 14 апреля 2020

Я получаю java .lang.NoSuchMethodError: org. apache .had oop .security.ProviderUtils.excludeIncompatibleCredentialProviders исключение при отправке моей работы с искрой с использованием spark-submit

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.hadoop.security.ProviderUtils.excludeIncompatibleCredentialProviders(Lorg/apache/hadoop/conf/Configuration;Ljava/lang/Class;)Lorg/apache/hadoop/conf/Configuration;
    at org.apache.hadoop.fs.s3a.S3AUtils.getAWSAccessKeys(S3AUtils.java:740)
    at org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider.<init>(SimpleAWSCredentialsProvider.java:58)
    at org.apache.hadoop.fs.s3a.S3AUtils.createAWSCredentialProviderSet(S3AUtils.java:600)
    at org.apache.hadoop.fs.s3a.S3AFileSystem.initialize(S3AFileSystem.java:260)
    at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2669)

Установлена ​​версия Spark : 2.4.5

Моя конфигурация: build.gradle:

buildscript {
    repositories {
        maven {
            url "https://*********/****/content/repositories/thirdparty"
            credentials {
                username ****User
                password ****Pwd
            }
        }
    }
}

plugins {
    id 'java'
    id 'com.github.johnrengelman.shadow' version '1.2.3'
}

group 'com.felix'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
    mavenLocal()
}

dependencies {
    compile group: 'org.apache.spark', name: 'spark-hadoop-cloud_2.11', version: '2.4.2.3.1.3.0-79'
    // https://mvnrepository.com/artifact/org.apache.spark/spark-sql
    compileOnly group: 'org.apache.spark', name: 'spark-sql_2.11', version: '2.4.5'
    // https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind
    compileOnly group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.6.7.3'
    // https://mvnrepository.com/artifact/org.apache.parquet/parquet-column
    compileOnly group: 'org.apache.parquet', name: 'parquet-column', version: '1.10.1'
    // https://mvnrepository.com/artifact/org.apache.parquet/parquet-hadoop
    compileOnly group: 'org.apache.parquet', name: 'parquet-hadoop', version: '1.10.1'
    // https://mvnrepository.com/artifact/org.apache.spark/spark-sketch
    compileOnly group: 'org.apache.spark', name: 'spark-sketch_2.11', version: '2.4.5'
    // https://mvnrepository.com/artifact/org.apache.spark/spark-core
    compileOnly group: 'org.apache.spark', name: 'spark-core_2.11', version: '2.4.5'
    // https://mvnrepository.com/artifact/org.apache.spark/spark-catalyst
    compileOnly group: 'org.apache.spark', name: 'spark-catalyst_2.11', version: '2.4.5'
    // https://mvnrepository.com/artifact/org.apache.spark/spark-tags
    compileOnly group: 'org.apache.spark', name: 'spark-tags_2.11', version: '2.4.5'
    compileOnly group: 'org.apache.spark', name: 'spark-avro_2.11', version: '2.4.5'
    // https://mvnrepository.com/artifact/org.apache.spark/spark-hive
    compileOnly group: 'org.apache.spark', name: 'spark-hive_2.11', version: '2.4.5'
    // https://mvnrepository.com/artifact/org.apache.xbean/xbean-asm6-shaded
    compile group: 'org.apache.xbean', name: 'xbean-asm7-shaded', version: '4.15'
    // https://mvnrepository.com/artifact/org.codehaus.janino/commons-compiler
    compileOnly group: 'org.codehaus.janino', name: 'commons-compiler', version: '3.0.9'
    // https://mvnrepository.com/artifact/org.codehaus.janino/janino
    compileOnly group: 'org.codehaus.janino', name: 'janino', version: '3.0.9'

    //HIVE Metastore
    compile group: 'org.postgresql', name: 'postgresql', version: '42.2.9'

    compile 'com.google.guava:guava:22.0'
    compile group: 'org.apache.hadoop', name: 'hadoop-common', version: '3.2.1'
    compile group: 'org.apache.hadoop', name: 'hadoop-aws', version: '3.2.1'
    compile group: 'org.apache.hadoop', name: 'hadoop-client', version: '3.2.1'
    compile group: 'com.amazonaws', name: 'aws-java-sdk-bundle', version: '1.11.271'

    compile group: 'io.delta', name: 'delta-core_2.11', version: '0.5.0'

    compile group: 'joda-time', name: 'joda-time', version: '2.10.5'
    compile group: 'org.projectlombok', name: 'lombok', version: '1.16.6'
}

shadowJar {
    zip64 true
}

Задание Spark:

df.distinct()
               .withColumn("date", date_format(col(EFFECTIVE_PERIOD_START), "yyyy-MM-dd"))
               .repartition(col("date"))
               .write()
               .format(fileFormat)
               .partitionBy("date")
               .mode(SaveMode.Append)
               .option("fs.s3a.committer.name", "partitioned")
               .option("fs.s3a.committer.staging.conflict-mode", "append")
               .option("spark.sql.sources.commitProtocolClass", "org.apache.spark.internal.io.cloud.PathOutputCommitProtocol")
               .option("spark.sql.parquet.output.committer.class", "org.apache.spark.internal.io.cloud.BindingParquetOutputCommitter")
               .option("compression", compressionCodecName.name().toLowerCase())
               .save(DOWNLOADS_NON_COMPACT_PATH);

Выполненный скрипт: spark-submit --класс com.felix.DataIngestionApplication --master local DataIngestion-1.0-SNAPSHOT-all.jar

Из чего я Я понимаю, что версия oop создает проблему Все файлы JAR oop - * должны быть на 100% совпадают в версиях . Итак, я убедился, что все org. apache .had oop зависимостей имеют одинаковую версию (3.2.1). Но все же это дает эту ошибку.

Я хочу использовать , имел oop версию 3 или новее , поскольку это обеспечивает более новые коммиттеры S3A , такие как "PartitionedStagingCommitter". Как все это используют с Spark 2.4.5 ?

Как заставить / переопределить версию oop для использования в качестве 3.2.1 вместо версий oop в Spark / jars? Когда я посмотрел на / usr / local / Cellar / apache -spark / 2.4.5 / libexec / jars / я мог видеть имел oop - common-2.7.3.jar, имел oop -client-2.7.3.jar et c. Так как же нам заставить oop более новую версию, и поэтому я мог бы использовать новые комиттеры S3A .?

Примечание. Если я не использую spark-submit и вместо этого запускаю приложение из IntelliJ со всеми зависимостями как compile , то приложение запускается и выполняется без исключения. Я мог видеть, как данные вставляются в S3.

1 Ответ

0 голосов
/ 28 апреля 2020

Я получил эту работу, установив дистрибутив Spark без Had oop (пользователь предоставил опцию версии oop) Затем установка была oop версия 3.2.1 (установка brew имела oop) и создайте файл spark-env. sh из файла spark-env. sh .template и добавьте следующую строку в spark-env. sh ( / usr / local / spark- 2.4.5 / conf / ):

export SPARK_DIST_CLASSPATH=$(hadoop classpath)

Теперь, когда я запускаю spark-submit, задание выполняется без проблем

...