【问题标题】:Sqoop failing when importing as avro in AWS EMR在 AWS EMR 中导入为 avro 时 Sqoop 失败
【发布时间】:2019-11-07 17:45:23
【问题描述】:

我正在尝试在 Amazon EMR(hadoop 2.8.5 sqoop 1.4.7)中执行sqoop import。当没有指定 avro 选项 (--as-avrodatafile) 时,导入非常顺利。但是一旦设置好,这项工作就会失败

19/10/29 21:31:35 INFO mapreduce.Job: Task Id : attempt_1572305702067_0017_m_000000_1, Status : FAILED
Error: org.apache.avro.reflect.ReflectData.addLogicalTypeConversion(Lorg/apache/avro/Conversion;)V

使用此选项-D mapreduce.job.user.classpath.first=true 不起作用。

在本地运行(在我的机器上)我发现将 sqoop 中的avro-1.8.1.jar 复制到 hadoop lib 文件夹是可行的,但是在 EMR 集群中我只能访问主节点,因此执行上述操作不起作用,因为它不是运行作业的主节点。

有人遇到过这个问题吗?

【问题讨论】:

    标签: sqoop avro amazon-emr


    【解决方案1】:

    我找到的解决方案是连接到集群中的每个节点(我以为我只能访问主节点,但我错了,在 EMR 中我们可以访问所有节点)并替换包含的 Avro jar通过 Sqoop 中的 Avro jar 使用 Hadoop。这不是一个优雅的解决方案,但它确实有效。

    [更新]

    当亚马逊说我们应该使用s3 时,我使用s3a 作为目标目录,所以-D mapreduce.job.user.classpath.first=true 选项不起作用。一旦我开始使用s3 Sqoop 就可以正确执行导入。因此,无需替换节点中的任何文件。由于亚马逊自己的配置,使用s3a可能会导致EMR下出现一些奇怪的错误,请勿使用。即使在性能方面s3 也优于 EMR 中的 s3a,因为 s3 的实现是 Amazon 的。

    【讨论】:

      猜你喜欢
      • 2020-12-17
      • 2016-09-04
      • 1970-01-01
      • 2013-05-17
      • 2020-08-10
      • 2017-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多