NoSuchMethodError Внутреннее ведение журнала Spark

Я упаковал свое приложение в файл jar, однако, когда я пытаюсь его выполнить, приложение завершается с ошибкой:

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.spark.internal.Logging.$init$(Lorg/apache/spark/internal/Logging;)V
    at org.apache.spark.streaming.kafka010.KafkaUtils$.<init>(KafkaUtils.scala:39)
    at org.apache.spark.streaming.kafka010.KafkaUtils$.<clinit>(KafkaUtils.scala)
    at jobs.SparkJobExample$.main(SparkJobExample.scala:56)
    at jobs.SparkJobExample.main(SparkJobExample.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.spark.deploy.JavaMainApplication.start(SparkApplication.scala:52)
    at org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:846)
    at org.apache.spark.deploy.SparkSubmit.doRunMain$1(SparkSubmit.scala:167)
    at org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:194)
    at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:86)
    at org.apache.spark.deploy.SparkSubmit$$anon$2.doSubmit(SparkSubmit.scala:921)
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:932)
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

Строка SparkJobExample.scala:56, указанная в этой ошибке, выглядит так:

 val dataRDD = KafkaUtils.createRDD(sparkContext,kafkaParams(),offsetRanges,LocationStrategies.PreferConsistent)

Как я понял, это может быть проблема с версией зависимостей, я проверил их, но все в порядке. Что может быть причиной этой ошибки?

Содержимое моего файла build.sbt:

name := "SparkK8s"
version := "0.1"
scalaVersion := "2.12.8"
val sparkVersion = "2.4.0"
val circeVersion = "0.11.0"

dependencyOverrides += "com.fasterxml.jackson.core" % "jackson-core" % "2.9.8"
dependencyOverrides += "com.fasterxml.jackson.core" % "jackson-databind" % "2.9.8"
dependencyOverrides += "com.fasterxml.jackson.module" % "jackson-module-scala" % "2.9.8"

resolvers += "Spark Packages Repo" at "http://dl.bintray.com/spark-packages/maven"
resolvers += "confluent" at "http://packages.confluent.io/maven/"

libraryDependencies ++= Seq(
  "org.apache.spark" %% "spark-core" % sparkVersion,
  "org.apache.spark" %% "spark-sql" % sparkVersion,
  "org.apache.spark" %% "spark-streaming" % sparkVersion,
  "org.apache.spark" %% "spark-hive" % sparkVersion,
  "org.apache.spark" %% "spark-sql-kafka-0-10" % sparkVersion,
  "org.apache.spark" %% "spark-streaming-kafka-0-10_2.12" % sparkVersion,
  "org.apache.kafka" %% "kafka" % "2.1.0",
  "org.apache.kafka" % "kafka-log4j-appender" % "2.1.0",
  "org.scalatest" %% "scalatest" % "3.2.0-SNAP10" % "it, test",
  "org.scalacheck" %% "scalacheck" % "1.14.0" % "it, test",
  "io.kubernetes" % "client-java" % "3.0.0" % "it",
  "org.json" % "json" % "20180813",
  "io.circe" %% "circe-core" % circeVersion,
  "io.circe" %% "circe-generic" % circeVersion,
  "io.circe" %% "circe-parser" % circeVersion,
  "org.apache.avro" % "avro" % "1.8.2",
  "io.confluent" % "kafka-avro-serializer" % "5.0.1"
)

ОБНОВЛЕНИЕ: я развернул файл jar как с Kubernetes, так и локально. Результат был таким же

$SPARK_HOME/bin/spark-submit \
   --master local \
   --name spark-etl-job \
   --class jobs.SparkJobExample \
   --conf spark.executor.instances=1 \
http://192.168.99.100:8089/spark_hive_job.jar <params_list>

Настройки сборки SBT:

assemblyJarName in assembly := "spark_hive_job.jar"

mainClass in assembly := Some("jobs.SparkJobExample")

test in assembly := {}

assemblyMergeStrategy in assembly := {
  case x if x.endsWith(".conf") => MergeStrategy.discard
  case PathList("org", "apache", "spark", "unused", "UnusedStubClass.class") => MergeStrategy.first
  case PathList("org", "apache", "commons", "logging", _*) => MergeStrategy.first
  case PathList("org", "apache", "commons", "beanutils", _*) => MergeStrategy.first
  case PathList("org", "apache", "commons", "collections", _*) => MergeStrategy.first
  case PathList("org", "apache", "hadoop", "yarn", _*) => MergeStrategy.first
  case PathList("org", "aopalliance", _*) => MergeStrategy.first
  case PathList("org", "objenesis", _*) => MergeStrategy.first
  case PathList("com", "sun", "jersey", _*) => MergeStrategy.first
  case PathList("org", "apache", "hadoop", "yarn", _*) => MergeStrategy.first
  case PathList("org", "slf4j", "impl", _*) => MergeStrategy.first
  case PathList("com", "codahale", "metrics", _*) => MergeStrategy.first
  case PathList("javax", "transaction", _*) => MergeStrategy.first
  case PathList("javax", "inject", _*) => MergeStrategy.first
  case PathList("javax", "xml", _*) => MergeStrategy.first
  case PathList("META-INF", "jersey-module-version") => MergeStrategy.first
  case PathList("example",  _*) => MergeStrategy.discard
  case PathList("utils",  _*) => MergeStrategy.discard
  case PathList("data_generation",  _*) => MergeStrategy.discard
  case PathList("example_tests",  _*) => MergeStrategy.discard
  case PathList("plugin.xml") => MergeStrategy.first
  case PathList("parquet.thrift") => MergeStrategy.first
  case PathList("git.properties") => MergeStrategy.first
  case PathList("codegen", "config.fmpp") => MergeStrategy.first
  case PathList("git.properties") => MergeStrategy.first
  case PathList("overview.html") => MergeStrategy.discard
  case x => (assemblyMergeStrategy in assembly).value(x)
}

Как вы создали БАНКА, а также уверены ли вы, что у вас те же версии, что и у искрового сервера, который вы пытаетесь развернуть?

Luis Miguel Mejía Suárez 28.01.2019 17:25

@LuisMiguelMejíaSuárez Я обновил вопрос, указав, как я развертываю банку.

Cassie 28.01.2019 17:39

спасибо, однако я спросил, как вы built это? может sbt package? Кроме того, опять же, вы уверены, что в развернутом кластере есть одинаковые версии Spark и Scala, которые вы использовали для компиляции БАНКА?

Luis Miguel Mejía Suárez 28.01.2019 17:56

Я построил его с помощью sbt assembly. Я добавил часть конфигурации сборки к вопросу

Cassie 28.01.2019 18:12

Если вы используете sbt assembly, вам необходимо исключить Искра и Скала из сгенерированного БАНКА. Для Искра используйте модификатор Provided при объявлении зависимостей "org.apache.spark" %% "spark-core" % sparkVersion % Provided(Вы должны сделать это для каждого модуля spark, уже установленного в вашем кластере, по крайней мере, core, sql, hive и streaming уже должны быть там). А для Скала добавьте этот вариантassemblyOption in assembly := (assemblyOption in assembly).value.copy(includeScala = false). Дайте мне знать, если это сработает, чтобы опубликовать это как ответ.

Luis Miguel Mejía Suárez 28.01.2019 18:46

К сожалению, выдает другую ошибку - ClassDefNotFound.

Cassie 29.01.2019 13:27

какой класс не нашел?

Luis Miguel Mejía Suárez 29.01.2019 14:40
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
7
2 434
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Понижение версии Scala до 2.11 решило проблемы. Я предполагаю, что есть некоторые проблемы с зависимостями Kafka для Scala 2.12.

Другие вопросы по теме