hadoop:jobconf类中的方法setmapperclass不能应用于给定的类型

ryhaxcpt  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(378)

我对在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编译并且我不会得到这个错误?这个问题可能措辞拙劣,含糊不清,也许是因为我自己对这个问题不熟悉。如果您能提出任何有助于提高这个问题质量的意见,我将不胜感激。

6rqinv9w

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.

相关问题