我想表演一个 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集群中,我只能访问主节点,因此执行上述操作不起作用,因为运行作业的不是主节点。
有人面对过这个问题吗?
1条答案
按热度按时间3hvapo4f1#
我找到的解决方案是连接到集群中的每个节点(我以为我只能访问主节点,但我错了,在emr中我们可以访问所有节点),并用sqoop中的avrojar替换hadoop中包含的avrojar。这不是一个优雅的解决方案,但它的工作。
[更新]
碰巧那个选项
-D mapreduce.job.user.classpath.first=true
因为我用了s3a
当亚马逊说我们应该使用s3
. 一旦我开始使用s3
sqoop可以正确地执行导入。因此,不需要替换节点中的任何文件。使用s3a
可能会导致一些奇怪的错误,在电子病历由于亚马逊自己的配置,不要使用它。即使是在性能方面s3
比…好s3a
在电子病历中作为s3
是亚马逊的。