我对在java中使用hadoop框架非常陌生。我正在试着设置 JobConf
对于仅具有Map器的特定map reduce作业(对于reducer没有实际的中间值)。我的mapper类在这里:
public static class GetArticlesMapper extends Mapper<LongWritable, WikipediaPage, Text, Text>
{
public static Set<String> peopleArticlesTitles = new HashSet<String>();
@Override
protected void setup(Mapper<LongWritable, WikipediaPage, Text, Text>.Context context)
throws IOException, InterruptedException {
// TODO: You should implement people articles load from
// DistributedCache here
super.setup(context);
}
@Override
public void map(LongWritable offset, WikipediaPage inputPage, Context context)
throws IOException, InterruptedException {
// TODO: You should implement getting article mapper here
}
}
但是,在编译java文件时,main方法中的这一行会抛出一个错误:
conf.setMapperClass(GetArticlesMapper.class);
上面写着:
错误:类jobconf中的方法setmapperclass不能应用于给定的类型;conf.setmapperclass(getarticlesmapper.class);^必需:找到类:类原因:实际参数类无法通过方法调用转换为类1错误
因此,我的问题是,我需要在mapper类的实现中修复什么,以便java编译并且我不会得到这个错误?这个问题可能措辞拙劣,含糊不清,也许是因为我自己对这个问题不熟悉。如果您能提出任何有助于提高这个问题质量的意见,我将不胜感激。
1条答案
按热度按时间6rqinv9w1#
您可能是在混合使用“旧api”和“新api”。基本上,旧的api(jobconf是其中的一部分)存在于
org.apache.hadoop.mapred
新的api(使用job和configuration代替)在org.apache.hadoop.mapreduce
. 你的计划可能正在实施org.apache.hadoop.mapreduce.Mapper
.有关所有差异的更多详细信息,请参见:http://hadoopbeforestarting.blogspot.de/2012/12/difference-between-hadoop-old-api-and.html.