искра 2.4 com.databricks.spark.avro устранение неполадок

У меня есть искровая работа, которую я обычно отправляю в кластер хаупов с локальной машины. Когда я отправляю его с помощью 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}

Почему новая версия искры отказывается принимать мой убержар? В документации на спарку 2.4 изменений не нашел. Кстати: банка была построена со искрой 2.1 в качестве зависимости. Любые идеи?

EDIT: я думаю, что моя проблема НЕ связана с тем, что искра не может найти что-то в моем 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)

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


person Antalagor    schedule 28.01.2019    source источник
comment
опубликуйте полную трассировку стека ошибок   -  person subodh    schedule 28.01.2019
comment
у меня есть некоторые выводы -› может быть связано с конфликтом между spark 2.40. встроенный в avro и com.databricks.spark.avro, который я использую. но банкомат не решил проблему. я посмотрю позже   -  person Antalagor    schedule 28.01.2019


Ответы (1)


Кажется, искре 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.

person Antalagor    schedule 28.01.2019
comment
Как добавить пакет? Это jar-файл? - person djohon; 17.06.2019
comment
Вы добавляете его, как указано выше, указав координаты maven. Но я не совсем уверен, где вы настраиваете репозитории, на что spark-submit смотрит при разрешении зависимостей. В моем случае он просматривается в моем локальном репозитории maven и в центральном репозитории, а также в удаленном репозитории spark-package. В любом случае вы можете указать желаемое репо с помощью --repositories. Если вы хотите отправить через дополнительную банку, вы можете сделать это с помощью --jars. - person Antalagor; 20.06.2019