【发布时间】:2019-01-31 13:05:44
【问题描述】:
我正在处理我尝试使用 Apache Sqoop 将大量数据从本地 PostgreSQL 从属副本导入 Avro 格式的 Google Cloud Storage 的问题。
使用默认格式导入数据工作得很好,但我的数据管道需要将数据导入 Avro 格式,但是由于过去多次报告的原因,这一直失败,例如:
- https://community.hortonworks.com/questions/60890/sqoop-import-to-avro-failing-which-jars-to-be-used.html
- http://discuss.itversity.com/t/unable-to-execute-sqoop-import-from-mysql-to-hive-for-avrodatafile/1529
我已尝试按照上述问题中的说明使用参数-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