使用 Sqoop 1.4.7 和 Hadoop 2.7.3 作为 Avro 导入数据失败

Importing data as Avro fails with Sqoop 1.4.7 and Hadoop 2.7.3

我正在处理一个问题,我正在尝试使用 Apache Sqoop 将大量数据从内部部署的 PostgreSQL 从属副本导入 Google Avro 格式的云存储。

使用默认格式导入数据工作得很好,但我的数据管道需要将数据导入 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,而该方法不可用。

我的环境有这些工具的以下版本:

有没有人仍然面临同样的问题并且将 -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

我遇到了同样的问题。除了 Hadoop 2.9.2 之外,我的配置完全相同。

当我替换原来的

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

和Sqoop 1.4.7自带的avro-1.8.1.jar,导入成功。

更改avro jar后,我还没有测试任何其他Avro操作。