2

Spark Yarn でジョブを実行していて、Influx DB にメッセージを送信しようとしていますが、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-submit を使用すると、実行時にこの競合を引き起こしている独自のバージョンの OKIO が Spark に必要なようです。...しかし、依存関係ツリーをダンプすると、それは表示されません。希望するバージョンの okio 1.13.0 を spark クラスターの実行パスに移動する方法について何かアドバイスはありますか?

(私が入力しているので、私が今行うシェーディングを試してみることを考えています)ありがとう

4

4 に答える 4

0

spark 2.1.0 でも同じ問題がありました。

解決策:influxdb-java依存関係をバージョン 2.11 (2.12 には空の子依存関係があり、ファット jar のアセンブルに問題があります) から 2.1 にダウングレードしました。

Influxdb-java 2.1 には異なる API がありますが、spark-submit アプリケーションで動作します。

于 2018-08-20T11:22:57.543 に答える