我正在处理以下问题:我试图使用Apache Sqoop将本地PostgreSQL从属副本中的大量数据导入Avro格式的Google Cloud Storage中。
使用默认格式导入数据可以很好地工作,但是我的数据管道需要将数据导入为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
答案 0 :(得分:3)
我遇到了同样的问题。除了拥有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操作。