У меня есть мастер и рабочий искры, работающие в контейнерах Docker со искрой 2.0.2 и Hadoop 2.7. Я пытаюсь отправить задание из pyspark из другого контейнера (та же сеть), запустив
df = spark.read.json("/data/test.json")
df.write.format("com.databricks.spark.avro").save("/data/test.avro")
Но я получаю эту ошибку:
java.lang.NoSuchMethodError: org.apache.avro.generic.GenericData.createDatumWriter(Lorg/apache/avro/Schema;)Lorg/apache/avro/io/DatumWriter;
Не имеет значения, буду ли я пытаться интерактивно или с помощью spark-submit. Это мои загруженные пакеты в искре:
com.databricks#spark-avro_2.11;3.2.0 from central in [default]
com.thoughtworks.paranamer#paranamer;2.7 from central in [default]
org.apache.avro#avro;1.8.1 from central in [default]
org.apache.commons#commons-compress;1.8.1 from central in [default]
org.codehaus.jackson#jackson-core-asl;1.9.13 from central in [default]
org.codehaus.jackson#jackson-mapper-asl;1.9.13 from central in [default]
org.slf4j#slf4j-api;1.7.7 from central in [default]
org.tukaani#xz;1.5 from central in [default]
org.xerial.snappy#snappy-java;1.1.1.3 from central in [default]
spark-submit --version
вывод:
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 2.0.2
/_/
Branch
Compiled by user jenkins on 2016-11-08T01:39:48Z
Revision
Url
Type --help for more information.
версия скалы 2.11.8
Моя команда pyspark:
PYSPARK_PYTHON=ipython /usr/spark-2.0.2/bin/pyspark --master spark://master:7077 --packages com.databricks:spark-avro_2.11:3.2.0,org.apache.avro:avro:1.8.1
Моя команда отправки искры:
spark-submit script.py --master spark://master:7077 --packages com.databricks:spark-avro_2.11:3.2.0,org.apache.avro:avro:1.8.1
Я прочитал здесь, что это может быть вызвано "старой версией avro», поэтому я попытался использовать 1.8.1, но все равно получаю ту же ошибку. Чтение авро работает нормально. Любая помощь?
script.py
должно идти после параметровspark-submit
, но не является причиной ошибки. Приложение действительно регистрируется в веб-интерфейсе Spark. Я уже нашел проблему и решение и скоро опубликую его. По сути, Hadoop включает в себя библиотеку avro (1.7.4), которую можно использовать вместо нужной, если путь к классам задан неправильно. - person arinarmo   schedule 04.04.2017