Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 使用mvn shade构建的MaxMind GeoIp依赖项jackson数据绑定中的NoSuchMethodException_Scala_Maven_Apache Spark_Jackson_Maxmind - Fatal编程技术网

Scala 使用mvn shade构建的MaxMind GeoIp依赖项jackson数据绑定中的NoSuchMethodException

Scala 使用mvn shade构建的MaxMind GeoIp依赖项jackson数据绑定中的NoSuchMethodException,scala,maven,apache-spark,jackson,maxmind,Scala,Maven,Apache Spark,Jackson,Maxmind,我试图在spark任务中运行MaxMind的geoIP,但我从MaxMind调用jackson数据绑定库中得到了NoSuchMethodException。我已经删除了使用mvn排除的所有其他版本的jackson数据绑定,但是在mvn清除后错误仍然存在。我错过了什么 无依赖项冲突: mvn依赖项:tree-Dverbose-Dincludes=com.fasterxml.jackson.core:jackson数据绑定 ... [信息]---maven依赖插件:2.8:tree(默认cli)@s

我试图在spark任务中运行MaxMind的geoIP,但我从MaxMind调用jackson数据绑定库中得到了NoSuchMethodException。我已经删除了使用mvn排除的所有其他版本的jackson数据绑定,但是在mvn清除后错误仍然存在。我错过了什么

无依赖项冲突:

mvn依赖项:tree-Dverbose-Dincludes=com.fasterxml.jackson.core:jackson数据绑定
...
[信息]---maven依赖插件:2.8:tree(默认cli)@sift etl---
[INFO]com.sift.etl:sift-etl:jar:0.1.6
[INFO]\-com.maxmind.geoip2:geoip2:jar:2.6.0:compile
[INFO]\-com.maxmind.db:maxminddb:jar:1.2.0:compile
[INFO]\-com.fasterxml.jackson.core:jackson-databind:jar:2.7.0:compile

错误:

线程“main”java.lang.NoSuchMethodError中出现异常:com.fasterxml.jackson.databind.node.ArrayNode。(Lcom/fasterxml/jackson/databind/node/JsonNodeFactory;Ljava/util/List;)V 位于com.maxmind.db.Decoder.decodeArray(Decoder.java:272)

编辑:我有大量的
org.codehaus.jackson
,我也需要排除这些吗?如何解决名称空间中的差异

编辑:这是内置于在ApacheSpark中运行的基于scala的项目中的。使用maven shade插件2.4将jar编译成着色jar

编辑: 下面是着色jar上jar tvf的完整输出:

以下是jackson数据绑定的grep结果:

0周一1月25日09:53:54太平洋标准时间2016年META-INF/maven/com.fasterxml.jackson.core/jackson-databind/
151周一1月25日09:53:54太平洋标准时间2016年META-INF/maven/com.fasterxml.jackson.core/jackson-databind/pom.properties
5192周一1月25日09:53:54太平洋标准时间2016年META-INF/maven/com.fasterxml.jackson.core/jackson-databind/pom.xml

和ArrayNode:
/usr/lib/jvm/sift-jdk1.8.0_66/bin/jar-tvf target/sift-etl-0.1.6-shade.jar | grep arrarynode
15060 Sat 2016年1月23日01:33:14 UTC Shadded/parquet/org/codehaus/jackson/node/ArrayNode.class
1309年1月23日星期六01:33:18 UTC 2016 org/apache/lucene/index/DocumentsWriterDeleteQueue$queryaraynode.class
1645年1月23日星期六01:33:18 UTC 2016 org/apache/lucene/index/DocumentsWriterDeleteQueue$TermArrayNode.class
18145年1月23日星期六01:33:20 UTC 2016 com/fasterxml/jackson/databind/node/ArrayNode.class
1058年1月23日星期六01:33:22 UTC 2016 org/apache/commons/configuration/plist/XMLPropertyListConfiguration$ArrayNode.class

初始化和查询maxmind GeoIP数据库在测试中成功运行。该错误仅在生产中作为spark任务运行时发生——在使用maven shade打包之后

maven shade插件配置:


着色jar不包含jackson数据绑定jar是否有意义,但是jar中的所有*.class文件?

com.fasterxml.jackson.core:jackson-databind
jar的2.2.0版开始,将
JsonNodeFactory
List
作为参数的
ArrayNode
构造函数的所有版本都被删除,因此这看起来像是
maxmind db
库中的一个bug,因为它引入了2.7.0版的jackson数据绑定,但(至少间接地)调用了一个过时的方法

如果可能,您可以尝试通过在pom文件中明确包含以下内容来降级您的
jackson databind
依赖项:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.1.0</version>
</dependency>

com.fasterxml.jackson.core
杰克逊数据绑定
2.1.0

通过将以下重新定位添加到着色jar配置中解决了此问题:


com.fasterxml.jackson.core
com.shade.fasterxml.jackson.core

老实说,我无法使用或从中获得此功能,因此我最终只是降级了
com.maxmind.geoip2
,这是引导我来到这里的最新建议,它起到了作用

<!-- Using an old version b/c https://github.com/maxmind/GeoIP2-java/issues/57 -->
<dependency>
  <groupId>com.maxmind.geoip2</groupId>
  <artifactId>geoip2</artifactId>
  <version>2.5.0</version>
</dependency>

com.maxmind.geoip2
geoip2
2.5.0

在我看来,这是一个错误。我将接受更正。我猜构造函数是在2.7.0中读到的,因为它是这样的。鉴于此,尽管存在maven依赖性,
jackson databind
的版本似乎不在执行相关代码的任何类加载器的类路径中。嗯,我还可以提供/调试什么来找出问题的原因吗?我有点不知所措,不知道还能看什么。无论如何,这是一个基于scala的项目,我尝试在Apache Spark任务中使用maxmind。如果您正在运行Spark任务,这是否意味着您正在准备一个包含所有依赖项的“胖罐子”?如果是,fat jar中是否包含
jackson数据绑定
jar的版本2.7.0?问题似乎与
spark assembly.jar中的
jackson数据绑定
版本有关。这里是my-verbose trace:
[Loaded org.apache.spark.TaskContextImpl$$anonfun$markTaskCompleted$1 from file:/home/vagrant/spark-1.6.1-bin-hadoop2.6/lib/spark-assembly-1.6.1-hadoop2.6.0.jar]
在尝试将Maxmind GeoIP2与spark-Scala一起使用时,我面临同样的问题。你能详细说明一下你的解决办法吗?你是用上面的阴影配置重新编译了Spark还是其他的?