我在Spark Yarn上运行一个作业,并试图向涌入的数据库发送消息,但我在一个okio冲突中崩溃:
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)下面是我的依赖项:
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集群运行路径,有什么建议吗?
(在我打字的时候,我正在考虑尝试着色,现在我将这样做)谢谢
发布于 2018-11-26 23:42:14
在我的案例中,“在Hadoop HDP发行版中使用Apache Spark 1.6.3”
spark-shell并在web UI上查看使用了哪些jar 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 okhttpjar 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
不知道谁提供了这个版本。
发布于 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应用程序。
发布于 2020-02-04 09:38:22
如果您尝试使用InfluxDBResultMapper从InfluxDB中检索Spark应用程序中的数据,您应该尝试第一个升级版本:
<dependency>
<groupId>org.influxdb</groupId>
<artifactId>influxdb-java</artifactId>
<version>2.7</version>
</dependency>我修好了!
https://stackoverflow.com/questions/49481868
复制相似问题