作者:帅到不行2502875781 | 来源:互联网 | 2022-12-25 12:00
如何解决《java.lang.NoSuchMethodError:org.apache.hadoop.conf.Configuration.reloadExistingConfigurations()V》经验,为你挑选了1个好方法。
看起来我再次陷入了使用spark提交运行打包的spark应用程序jar的麻烦。以下是我的pom文件:
oneview-forecaster
com.dataxu.oneview.forecast
1.0.0-SNAPSHOT
4.0.0
forecaster
com.fasterxml.jackson.core
jackson-databind
com.fasterxml.jackson.module
jackson-module-scala_${scala.binary.version}
org.scala-lang
scala-library
${scala.version}
org.apache.spark
spark-streaming_${scala.binary.version}
${spark.version}
provided
org.apache.spark
spark-sql_${scala.binary.version}
${spark.version}
org.apache.spark
spark-hive_2.11
2.2.0
org.apache.hadoop
hadoop-aws
2.8.3
com.amazonaws
aws-java-sdk
1.10.60
joda-time
joda-time
2.9.9
org.apache.hadoop
hadoop-common
2.8.0
src/main/scala
src/test/scala
net.alchim31.maven
scala-maven-plugin
${scala-maven-plugin.version}
compile
testCompile
maven-assembly-plugin
com.dataxu.oneview.forecaster.App
jar-with-dependencies
make-assembly
package
single
以下是一个简单的代码段,该代码段从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提交运行它时,最终在出现以下错误.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.(S3AFileSystem.java:185)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
...
我不了解未打包哪个依赖项,或者可能是问题所在,因为我确实正确设置了版本,期望hadoop的aws应该拥有所有的版本。
任何帮助将不胜感激。
1> ernest_k..:
hadoop和AWS JDK之间的依赖关系非常敏感,您应该坚持使用构建hadoop依赖关系版本的正确版本。
您需要解决的第一个问题是选择一个版本的Hadoop。我看到您正在混用的版本2.8.3
和2.8.0
。
当我查看的依赖树时org.apache.hadoop:hadoop-aws:2.8.0
,我发现它是针对1.10.6
AWS SDK 版本构建的(与相同hadoop-aws:2.8.3
)。
这可能是导致不匹配的原因(您正在混合使用不兼容的版本)。所以:
选择您要使用的hadoop版本
包含hadoop-aws
与您的hadoop兼容的版本
删除其他依赖项,或仅将它们包含在与您的hadoop版本兼容的那些版本中。