Lik*_*ika 16 hadoop mapreduce guava apache-spark
我正在尝试运行小火花应用程序,并得到以下异常:
Exception in thread "main" java.lang.IllegalAccessError: tried to access method com.google.common.base.Stopwatch.<init>()V from class org.apache.hadoop.mapreduce.lib.input.FileInputFormat
at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.listStatus(FileInputFormat.java:262)
at org.apache.hadoop.mapreduce.lib.input.CombineFileInputFormat.getSplits(CombineFileInputFormat.java:217)
at org.apache.spark.rdd.NewHadoopRDD.getPartitions(NewHadoopRDD.scala:95)
at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:219)
at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:217)
at scala.Option.getOrElse(Option.scala:120)
at org.apache.spark.rdd.RDD.partitions(RDD.scala:217)
at org.apache.spark.rdd.MapPartitionsRDD.getPartitions(MapPartitionsRDD.scala:32)
at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:219)
at org.apache.spark.rdd.RDD$$anonfun$partitions$2.apply(RDD.scala:217)
at scala.Option.getOrElse(Option.scala:120)
Run Code Online (Sandbox Code Playgroud)
相关的gradle依赖项部分:
compile('org.apache.spark:spark-core_2.10:1.3.1')
compile('org.apache.hadoop:hadoop-mapreduce-client-core:2.6.2') {force = true}
compile('org.apache.hadoop:hadoop-mapreduce-client-app:2.6.2') {force = true}
compile('org.apache.hadoop:hadoop-mapreduce-client-shuffle:2.6.2') {force = true}
compile('com.google.guava:guava:19.0') { force = true }
Run Code Online (Sandbox Code Playgroud)
Lik*_*ika 36
版本2.6.2的hadoop:hadoop-mapreduce-client-core不能一起使用guava的新版本(我试过17.0- 19.0)以来guava的StopWatch构造函数不能被访问(以上引起IllegalAccessError)
采用hadoop-mapreduce-client-core的最新版本- 2.7.2(在不使用guava的StopWatch上述方法,而他们使用org.apache.hadoop.util.StopWatch),解决了这个问题,与是需要两个额外的依赖关系:
compile('org.apache.hadoop:hadoop-mapreduce-client-core:2.7.2') {force = true}
compile('org.apache.hadoop:hadoop-common:2.7.2') {force = true} // required for org.apache.hadoop.util.StopWatch
compile('commons-io:commons-io:2.4') {force = true} // required for org.apache.commons.io.Charsets that is used internally
Run Code Online (Sandbox Code Playgroud)
注意:有两个org.apache.commons.io包:
commons-io:commons-io(我们这里)和
org.apache.commons:commons-io(旧的,2007).确保包含正确的.
小智 11
我只是将我的番石榴版本从19.0改为15.0并且它有效.我目前正在使用版本spark 2.2
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>15.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
小智 8
我们刚刚使用IntelliJ和Spark遇到了相同的情况。
使用时
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.3.1"
libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.3.1"
Run Code Online (Sandbox Code Playgroud)
com.google.guava 20.0已下载,hadoop客户端2.6.5已下载。
最快的解决方案是将guava库强制为版本15.0(SBT)
dependencyOverrides += "com.google.guava" % "guava" % "15.0"
Run Code Online (Sandbox Code Playgroud)
听起来您的 Guava 版本不匹配。
您的代码库中的某些内容正在尝试调用Stopwatch构造函数,但是从 Guava 17.0 中删除了构造函数,以支持在 Guava 15.0 中添加的静态工厂方法 ( createStarted()and createUnstarted())。
您应该更新任何尝试使用构造函数的代码,以使用静态工厂方法。
我在Spark 1.6.1中遇到了这个问题,因为我们的其他依赖项之一驱逐了Guava 14.0.1,并将其替换为18.0。Spark具有2.2的hadoop-client的基本依赖性。参见[Maven回购](https://mvnrepository.com/artifact/org.apache.spark/spark-core_2.10/1.6.1)
适用的解决方案是在sbt中添加libraryDependencies以下内容:"org.apache.hadoop" % "hadoop-client" % "2.7.2"
| 归档时间: |
|
| 查看次数: |
16296 次 |
| 最近记录: |