在aws emr中作为avro导入时,sqoop失败

cs7cruho  于 2021-06-03  发布在  Sqoop
关注(0)|答案(1)|浏览(357)

我想表演一个 sqoop import 在amazonemr中(hadoop2.8.5sqoop1.4.7)。当没有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 不起作用。
在本地运行(在我的机器中)时,我发现 avro-1.8.1.jar 在sqoop-to-hadoop中,lib文件夹可以工作,但在emr集群中,我只能访问主节点,因此执行上述操作不起作用,因为运行作业的不是主节点。
有人面对过这个问题吗?

3hvapo4f

3hvapo4f1#

我找到的解决方案是连接到集群中的每个节点(我以为我只能访问主节点,但我错了,在emr中我们可以访问所有节点),并用sqoop中的avrojar替换hadoop中包含的avrojar。这不是一个优雅的解决方案,但它的工作。
[更新]
碰巧那个选项 -D mapreduce.job.user.classpath.first=true 因为我用了 s3a 当亚马逊说我们应该使用 s3 . 一旦我开始使用 s3 sqoop可以正确地执行导入。因此,不需要替换节点中的任何文件。使用 s3a 可能会导致一些奇怪的错误,在电子病历由于亚马逊自己的配置,不要使用它。即使是在性能方面 s3 比…好 s3a 在电子病历中作为 s3 是亚马逊的。

相关问题