【问题标题】:Importing data as Avro fails with Sqoop 1.4.7 and Hadoop 2.7.3Sqoop 1.4.7 和 Hadoop 2.7.3 以 Avro 格式导入数据失败
【发布时间】:2019-01-31 13:05:44
【问题描述】:

我正在处理我尝试使用 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,而该版本不可用。

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

  • 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

【问题讨论】:

    标签: java mapreduce sqoop hadoop2 avro


    【解决方案1】:

    我也遇到了同样的问题。除了 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 操作。

    【讨论】:

    • 也为我工作!干杯!
    • 感谢它有效,在我的情况下,我也必须替换 ${HADOOP_HOME}/share/hadoop/hdfs/lib/avro-1.7.7.jar (hadoop 3.0.0)
    猜你喜欢
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 2020-08-10
    • 2016-11-01
    • 2020-09-27
    • 1970-01-01
    相关资源
    最近更新 更多