首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >火花和涌入: OKIO冲突

火花和涌入: OKIO冲突
EN

Stack Overflow用户
提问于 2018-03-26 07:00:10
回答 4查看 1.9K关注 0票数 2

我在Spark Yarn上运行一个作业,并试图向涌入的数据库发送消息,但我在一个okio冲突中崩溃:

代码语言:javascript
复制
22:17:54 ERROR ApplicationMaster - User class threw exception: java.lang.NoSuchMethodError: okio.BufferedSource.readUtf8LineStrict(J)Ljava/lang/String;
java.lang.NoSuchMethodError: okio.BufferedSource.readUtf8LineStrict(J)Ljava/lang/String;
    at okhttp3.internal.http1.Http1Codec.readHeaderLine(Http1Codec.java:212)
    at okhttp3.internal.http1.Http1Codec.readResponseHeaders(Http1Codec.java:189)

下面是我的依赖项:

代码语言:javascript
复制
val cdhVersion = "cdh5.12.2"
val sparkVersion = "2.2.0.cloudera2"
val parquetVersion = s"1.5.0-$cdhVersion"
val hadoopVersion = s"2.6.0-$cdhVersion"
val awsVersion = "1.11.295"
val log4jVersion = "1.2.17"
val slf4jVersion = "1.7.5" 

lazy val sparkDependencies = Seq(
  "org.apache.spark" %% "spark-core" % sparkVersion,
  "org.apache.spark" %% "spark-hive" % sparkVersion,
  "org.apache.spark" %% "spark-sql" % sparkVersion,
  "org.apache.spark" %% "spark-streaming" % sparkVersion,
  "org.apache.hadoop" % "hadoop-common" % "2.2.0"
)

lazy val otherDependencies = Seq(
  "org.apache.spark" %% "spark-streaming-kinesis-asl" % "2.2.0",
  "org.clapper" %% "grizzled-slf4j" % "1.3.1",
  "org.apache.logging.log4j" % "log4j-slf4j-impl" % "2.6.2" % "runtime",
  "org.slf4j" % "slf4j-log4j12" % slf4jVersion,
  "com.typesafe" % "config" % "1.3.1",
  "org.rogach" %% "scallop" % "3.0.3",
  "org.influxdb" % "influxdb-java" % "2.9"
)


libraryDependencies ++= sparkDependencies.map(_ % "provided" ) ++ otherDependencies

dependencyOverrides ++= Set("com.squareup.okio" % "okio" % "1.13.0")

使用相同的jar,我可以成功地运行一个测试来实例化非spark作业中的InfluxDb实例。但是尝试从Spark中执行一些操作会抛出上述错误。听起来spark必须有它自己的OKIO版本,当我使用spark-submit时,OKIO在运行时会导致这种冲突。..。但当我转储依赖关系树时,它不会显示这一点。关于如何将我想要的okio 1.13.0版本带到spark集群运行路径,有什么建议吗?

(在我打字的时候,我正在考虑尝试着色,现在我将这样做)谢谢

EN

回答 4

Stack Overflow用户

发布于 2018-11-26 23:42:14

在我的案例中,“在Hadoop HDP发行版中使用Apache Spark 1.6.3”

  1. 我运行spark-shell并在web UI上查看使用了哪些jar
  2. Search okhttp jar tf /usr/hdp/current/spark-client/lib/spark-assembly-1.6.3.2.6.3.0-235-hadoop2.7.3.2.6.3.0-235.jar | grep okhttp
  3. Extract okhttp版本jar xf /usr/hdp/current/spark-client/lib/spark-assembly-1.6.3.2.6.3.0-235-hadoop2.7.3.2.6.3.0-235.jar META-INF/maven/com.squareup.okhttp/okhttp/pom.xml

=>版本2.4.0

不知道谁提供了这个版本。

票数 1
EN

Stack Overflow用户

发布于 2018-08-20 19:22:58

我在spark 2.1.0上也遇到了同样的问题。

解决方案:我已经将influxdb-java依赖从2.11版本降级到2.1 (2.12有空子依赖,我们在组装fat jar时有问题)。

Influxdb-java2.1有不同的API,但它适用于spark-submit应用程序。

票数 0
EN

Stack Overflow用户

发布于 2020-02-04 09:38:22

如果您尝试使用InfluxDBResultMapper从InfluxDB中检索Spark应用程序中的数据,您应该尝试第一个升级版本:

代码语言:javascript
复制
        <dependency>
            <groupId>org.influxdb</groupId>
            <artifactId>influxdb-java</artifactId>
            <version>2.7</version>
        </dependency>

我修好了!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49481868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档