Импорт данных как Avro завершается неудачно с Sqoop 1.4.7 и Hadoop 2.7.3 - PullRequest
0 голосов
/ 31 января 2019

Я имею дело с проблемой, когда я пытаюсь импортировать огромное количество данных из локальной ведомой реплики PostgreSQL в облачное хранилище Google в формате Avro с использованием Apache Sqoop.

Импорт данных с форматами по умолчанию работает очень хорошо, но моя линия данных потребовала бы импорта данных в формат Avro, однако это не удается из-за причины, о которой много раз сообщалось в прошлом, например:

Я пытался использовать аргумент -Dmapreduce.job.user.classpath.first=true, как указано в вышеупомянутых вопросах, но ошибка по-прежнему:

java.lang.Exception: java.lang.NoSuchMethodError: org.apache.avro.reflect.ReflectData.addLogicalTypeConversion(Lorg/apache/avro/Conversion;)V

Этот метод, кажется, добавлен в Avro v.1.8.0, но некоторые зависимости используют более старую версию Avro, где это недоступно.

В моей среде есть следующие версии этих инструментов:

  • Hadoop 2.7.3.2.6.3.0-235
  • Sqoop 1.4.7
  • javac 1.8.0_191
  • sqoop / lib / parquet-avro-1.6.0.jar
  • sqoop / lib / avro-1.8.1.jar
  • sqoop / lib /avro-mapred-1.8.1-hadoop2.jar

Кто-нибудь еще сталкивался с такой же проблемой, и добавление -Dmapreduce.job.user.classpath.first=true к sqoop import не решает проблему?

# Command I'm running
sqoop import -Dmapreduce.job.user.classpath.first=true \
-Dsqoop.export.records.per.statement=1 \
--connect jdbc:postgresql://XX.XX.X.XX/db \
--username postgres \
--password XXXX \
--table FOO \
--target-dir gs://test-bucket/test/ \
--as-avrodatafile \
2>&1 | tee -a /home/userA/logs/test.log

1 Ответ

0 голосов
/ 12 февраля 2019

Я столкнулся с той же проблемой.Моя конфигурация идентична, за исключением того, что у меня Hadoop 2.9.2.

Когда я заменил исходный

${HADOOP_HOME}/share/hadoop/common/lib/avro-1.7.7.jar

на avro-1.8.1.jar, поставляемый с Sqoop 1.4.7, импорт завершился успешно.

Я еще не проверял никаких других операций Avro после того, как я изменил avro jar.

...