我正在尝试使用 JobControl
将多个映射器和化简器连接在一起,但在调用 JobConf.setMapperClass
时遇到以下错误:
setMapperClass(java.lang.Class<? extends org.apache.hadoop.mapred.Mapper>) in
org.apache.hadoop.mapred.JobConf cannot be applied to
(java.lang.Class<capture#530 of ? extends org.apache.hadoop.mapreduce.Mapper>)
似乎java抱怨我的Mapper实现是基于mapreduce.Mapper
的,而JobControl则mapred.Mapper
。(我这部分是对的吗?
现在我的问题是:我应该继续使用mapreduce吗?映射器并放弃 JobControl,并找到其他东西来连接我的作业,或者将我的实现更改为 mapred。映射器并继续使用JobControl
。 其中一个是否被视为折旧?
正如评论中所讨论的,mapred
和mapreduce
包彼此不同,mapreduce
是更新、更干净的包。这篇文章进一步讨论了差异:hadoop.mapred vs hadoop.mapreduce?
因此,对于您的特定问题,您似乎想使用 org.apache.hadoop.mapreduce.lib.jobcontrol.JobControl
而不是 org.apache.hadoop.mapred.jobcontrol.JobControl
.
另请参阅:使用 mapred 或 mapreduce 包来创建 Hadoop 作业更好吗?