2016-06-10 3 views
0

я получаюNoClassDefFoundError при использовании Avro в свече скорлупе

java.lang.NoClassDefFoundError: org/apache/avro/mapred/AvroWrapper

при вызове show() на объекте DataFrame. Я пытаюсь сделать это через оболочку (искр-оболочка - мама пряжи). Я вижу, что оболочка распознает схему при создании объекта DataFrame, но если я выполню какие-либо действия над данными, она всегда будет бросать NoClassDefFoundError при попытке создать экземпляр AvroWrapper. Я попытался добавить avro-mapred-1.8.0.jar в свой каталог $HDFS_USER/lib на кластере и даже включил его с помощью опции -jar при запуске оболочки. Ни один из этих вариантов не работал. Любые советы будут очень признательны. Ниже приведен пример кода:

scala> import org.apache.spark.sql._ 
scala> import com.databricks.spark.avro._ 
scala> val sqc = new SQLContext(sc) 
scala> val df = sqc.read.avro("my_avro_file") // recognizes the schema and creates the DataFrame object 
scala> df.show // this is where I get NoClassDefFoundError 

ответ

0

Если кто-то еще сталкивается с этой проблемой, я, наконец, решил ее. Я удалил искровой пакет CDH и загрузил его с http://spark.apache.org/downloads.html. После этого все сработало нормально. Не уверен, какие проблемы были с версией CDH, но я больше не собираюсь тратить время на то, чтобы понять это.

1

Сам объект DataFrame создается на val df =... линии, но данные еще не читали. Spark только начинает считывать и обрабатывать данные, когда вы запрашиваете какой-то вывод (например, df.count(), или df.show()).

Таким образом, оригинальная проблема заключается в том, что отсутствует пакет, созданный с помощью avro. Попробуйте запустить свой Спарк Shell, как это:

spark-shell --packages org.apache.avro:avro-mapred:1.7.7,com.databricks:spark-avro_2.10:2.0.1 Искра Avro пакет маркирует пакет Avro Mapred, как это предусмотрено, но он не доступен в вашей системе (или классам) по той или иной причине.

+0

кажется, просто сидеть там. не будет развиваться дальше. 'org.apache.avro # avro-mapred добавлен как зависимость' ' com.databricks # spark-avro_2.10 добавлен как зависимость' ':: разрешающие зависимости :: org.apache.spark # spark-submit -parent; 1.0' \t 'confs: [default]' – Pudge

+0

Это странно. Можете ли вы вставить всю команду, которую вы используете, для запуска искровой оболочки? –

+0

Извинения за отсроченный ответ Мне пришлось переключать задачи на пару дней. Вот команда, которую я запускаю: spark-shell --master yarn --packages org.apache.avro: avro-mapred: 1.7.7, com.databricks: spark-avro_2.10: 2.0.1'. Кроме того, не уверен, что это имеет значение, но мы работаем с CDH 5.6. Еще раз спасибо. – Pudge

Смежные вопросы