我一直试图在oozie上运行Avro map-reduce . 我在workflow.xml中指定了mapper和reducer类,并提供了其他配置 . 但它给出了一个
java.lang.RunTime Exception - class mr.sales.avro.etl.SalesMapper not org.apache.hadoop.mapred.Mapper
直接在hadoop集群上运行(而不是通过oozie)时的相同作业将完成并提供所需的输出 . 所以我似乎可能错过了一些oozie配置 . 我从异常中猜测oozie要求映射器是 org.apache.hadoop.mapred.Mapper
的子类,但Avro映射器具有不同的签名 - 它们扩展了org.apache.avro.mapred.AvroMapper,这可能是错误的原因 .
所以我的问题是如何配置oozie工作流/属性文件以允许它运行Avro map-reduce作业 .
3 回答
使用AVRO,您需要配置一些额外的属性:
org.apache.avro.mapred.HadoopMapper
是您需要设置的实际映射器类(这实现了Mapper接口)avro.mapper
属性应该命名为SalesMapper
类组合器和减速器还有其他属性 - 检查AvroJob源和实用程序方法 .
另一种方法是从您手动提交的作业中检查job.xml,并将相关配置属性复制到您的oozie workflow.xml
本周我一直有同样的问题 . 这是我的workflow.xml(已修改):
根据map-reduce作业的输入和输出,您可能需要稍微修改一下 .
你也可以发布mapper和reducer类吗?我的oozie工作流程工作正常,但o / p文件不是.avro文件 . 这是我的工作流程:
我的mapper和reducer定义如下: