我处理的问题,我想从使用Apache Sqoop内部部署的PostgreSQL从属副本到谷歌云存储中的Avro格式导入数据的大量。
默认格式将数据导入工作得很好,但我datapipeline需要将数据导入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的操作之后,我改变了Avro的罐子。