[HADOOP] java.lang.NoSuchMethodError : org.apache.hadoop.conf.Configuration.reloadExistingConfigurations () V
HADOOPjava.lang.NoSuchMethodError : org.apache.hadoop.conf.Configuration.reloadExistingConfigurations () V
내가 다시 spark 제출을 사용하여 패키지 스파크 애플 리케이션 항아리를 실행에 붙어있어 보인다. 다음은 내 POM 파일입니다.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<artifactId>oneview-forecaster</artifactId>
<groupId>com.dataxu.oneview.forecast</groupId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>forecaster</artifactId>
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-scala_${scala.binary.version}</artifactId>
</dependency>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>${scala.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_${scala.binary.version}</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_${scala.binary.version}</artifactId>
<version>${spark.version}</version>
<!--<scope>provided</scope>-->
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-hive -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_2.11</artifactId>
<version>2.2.0</version>
<!--<scope>provided</scope>-->
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-aws</artifactId>
<version>2.8.3</version>
<!--<scope>provided</scope>-->
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
<version>1.10.60</version>
</dependency>
<!-- https://mvnrepository.com/artifact/joda-time/joda-time -->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.9.9</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.8.0</version>
<!--<scope>provided</scope>-->
</dependency>
</dependencies>
<build>
<sourceDirectory>src/main/scala</sourceDirectory>
<testSourceDirectory>src/test/scala</testSourceDirectory>
<plugins>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>${scala-maven-plugin.version}</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.dataxu.oneview.forecaster.App</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
다음은 s3 위치에서 데이터를 가져 와서 인쇄하는 간단한 코드 스 니펫입니다.
def getS3Data(path: String): Map[String, Any] = {
println("spark session start.........")
val spark = getSparkSession()
val configTxt = spark.sparkContext.textFile(path)
.collect().reduce(_ + _)
val mapper = new ObjectMapper
mapper.registerModule(DefaultScalaModule)
mapper.readValue(configTxt, classOf[Map[String, String]])
}
내가 intellij에서 실행할 때, 모든 것이 잘 작동합니다. 로그는 깨끗하고 잘 보입니다. 그러나 mvn 패키지를 사용하여 패키지를 만들고 spark submit을 사용하여 실행하려고하면 .collect.reduce (_ + _)에서 다음 오류가 발생합니다. 다음과 같은 오류가 발생합니다.
"main" java.lang.NoSuchMethodError: org.apache.hadoop.conf.Configuration.reloadExistingConfigurations()V
at org.apache.hadoop.fs.s3a.S3AFileSystem.addDeprecatedKeys(S3AFileSystem.java:181)
at org.apache.hadoop.fs.s3a.S3AFileSystem.<clinit>(S3AFileSystem.java:185)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
...
나는 hadoop aws가 그들 모두를 가져야한다고 기대하는 버전을 올바르게 설정했기 때문에 어떤 의존성이 패키지화되지 않았는지 이해할 수 없다.
어떤 도움을 주시면 감사하겠습니다.
해결법
-
==============================
1.hadoop과 AWS JDK 간의 의존성은 매우 민감하므로 hadoop 종속성 버전이 빌드 된 올바른 버전을 사용해야합니다.
hadoop과 AWS JDK 간의 의존성은 매우 민감하므로 hadoop 종속성 버전이 빌드 된 올바른 버전을 사용해야합니다.
해결해야 할 첫 번째 문제는 한 버전의 Hadoop을 선택하는 것입니다. 2.8.3과 2.8.0 버전을 섞어 놓고있는 것을 보았습니다.
org.apache.hadoop : hadoop-aws : 2.8.0에 대한 종속성 트리를 보면 AWS SDK의 버전 1.10.6 (hadoop-aws : 2.8.3과 동일)에 대해 빌드 된 것을 볼 수 있습니다.
이것은 아마도 불일치를 일으키는 원인 일 것입니다 (호환되지 않는 버전을 혼합하고 있습니다). 그래서:
-
==============================
2.다른 누군가가 여전히이 오류에 걸려 넘어 졌을 때 ... 알아내는 데는 시간이 걸렸지 만, 프로젝트에 org.apache.avro / avro-tools 패키지의 종속성 (직접 또는 이행 성)이 있는지 확인하십시오. 전이 의존성에 의해 제 코드로 옮겨졌습니다. 문제는 org.apache.hadoop.conf.Configuration 사본과 함께 제공된다는 것입니다. 이것은 현재 모든 버전의 hadoop보다 훨씬 오래되었으므로 클래스 패스에서 선택되는 파일이 될 수 있습니다.
다른 누군가가 여전히이 오류에 걸려 넘어 졌을 때 ... 알아내는 데는 시간이 걸렸지 만, 프로젝트에 org.apache.avro / avro-tools 패키지의 종속성 (직접 또는 이행 성)이 있는지 확인하십시오. 전이 의존성에 의해 제 코드로 옮겨졌습니다. 문제는 org.apache.hadoop.conf.Configuration 사본과 함께 제공된다는 것입니다. 이것은 현재 모든 버전의 hadoop보다 훨씬 오래되었으므로 클래스 패스에서 선택되는 파일이 될 수 있습니다.
내 스칼라 프로젝트에서, 나는 그것을 단지
ExclusionRule("org.apache.avro","avro-tools")
오류 (마침내!)가 사라집니다.
나는 avro-tools 코더들이 다른 패키지 (hadoop-common)에 속한 파일의 복사본을 포함하는 좋은 이유가 있다고 확신한다. 정말로 거기에있는 것을 발견하면 놀랐고 하루 종일 낭비하게 만들었다.
from https://stackoverflow.com/questions/49158612/java-lang-nosuchmethoderror-org-apache-hadoop-conf-configuration-reloadexisting by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] HDFS 파일을 입력하고 출력 파일을 HDFS에 저장하는 매퍼 또는 감속기에서 외부 프로그램을 실행하는 방법은 무엇입니까? (0) | 2019.07.20 |
---|---|
[HADOOP] Distcp - 컨테이너가 실제 메모리 제한을 초과하여 실행 중입니다. (0) | 2019.07.20 |
[HADOOP] 행 키에 대해 다른 값을 넣을 수 있지만 hbase에 동일한 타임 스탬프를 넣는 솔루션은 무엇입니까? (0) | 2019.07.20 |
[HADOOP] Apache SPARK : 브로드 캐스트 변수에 대한 -Nullpointer 예외 (YARN 클러스터 모드) (0) | 2019.07.20 |
[HADOOP] Apache Spark의 맥락에서 메모리 내 데이터 저장은 무엇을 의미합니까? (0) | 2019.07.20 |