искры 2.4 com.databricks.spark.avro устранение неисправностей - PullRequest
0 голосов
/ 28 января 2019

У меня есть искровое задание, которое я обычно отправляю в кластер hadoop с локальной машины.Когда я отправляю его с помощью spark 2.2.0 , он работает нормально, но не запускается, когда я отправляю его с версией 2.4.0 .Только SPARK_HOME имеет значение.

drwxr-xr-x  18 me  576 Jan 23 14:15 spark-2.4.0-bin-hadoop2.6
drwxr-xr-x  17 me  544 Jan 23 14:15 spark-2.2.0-bin-hadoop2.6

Я отправляю задание как

spark-submit \
--master yarn \
--num-executors 20 \
--deploy-mode cluster \
--executor-memory 8g \
--driver-memory 8g \
--class package.MyMain uberjar.jar \
--param1 ${BLA} \
--param2 ${BLALA}

Почему новая версия Spark отказывается принимать мой uberjar?Я не нашел никаких изменений в иске 2.4 документ.Кстати: банка была построена с искрой 2.1 в качестве зависимости.Есть идеи?

РЕДАКТИРОВАТЬ: Я думаю, что моя проблема НЕ связана с искрой, которая не может найти вещи в моем uberjar.Скорее у меня могут быть проблемы с новой встроенной функцией avro.Как и прежде, я читаю avro файлы, используя неявную функцию spark.read.avro из com.databricks.spark.avro._.Spark 2.4.0 имеет несколько новых встроенных функций avro (большинство из них можно найти в org.apache.spark:spark-avro_2.*11*:2.4.0).Ошибка может иметь какое-то отношение к этому.

java.lang.ClassNotFoundException: Failed to find data source: org.apache.spark.sql.avro.AvroFileFormat. Please find packages at http://spark.apache.org/third-party-projects.html
at org.apache.spark.sql.execution.datasources.DataSource$.lookupDataSource(DataSource.scala:657)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:194)
at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:178)
at com.databricks.spark.avro.package$AvroDataFrameReader$$anonfun$avro$2.apply(package.scala:34)
at com.databricks.spark.avro.package$AvroDataFrameReader$$anonfun$avro$2.apply(package.scala:34)
at myproject.io.TrainingFileIO.readVectorAvro(TrainingFileIO.scala:59)
at myproject.training.MainTraining$.train(MainTraining.scala:37)

soo.Я думаю, что проблема кроется глубже.Фактическая ошибка, которую я получаю:

1 Ответ

0 голосов
/ 28 января 2019

Кажется, что spark 2.4.0 нуждается в --packages org.apache.spark:spark-avro_2.11:2.4.0 для запуска старых строк кода com.databricks.spark.avro.Вот некоторое описание https://spark.apache.org/docs/latest/sql-data-sources-avro.html

Так что моя проблема не имела никакого отношения к отсутствующему классу в моей банке, скорее, у нее были некоторые проблемы с новыми встроенными функциями avro в новой версии spark.

...