导入数据的Avro失败,Sqoop 1.4.7和Hadoop 2.7.3

问题描述 投票:2回答:1

我处理的问题,我想从使用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的旧版本在那里,这是不可用。

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

  • Hadoop的2.7.3.2.6.3.0-235
  • Sqoop 1.4.7
  • javac的1.8.0_191
  • Sqoop / lib目录/镶木欧元160jar
  • sqoop / LIB /欧元1.8.1.jar
  • sqoop / LIB /阿夫罗-mapred-1.8.1-hadoop2.jar

有没有人仍然面临着同样的问题,并增加-Dmapreduce.job.user.classpath.first=truesqoop 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
java mapreduce sqoop hadoop2 avro
1个回答
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的操作之后,我改变了Avro的罐子。

© www.soinside.com 2019 - 2024. All rights reserved.