java – Hadoop – 映射器和reducer的@Override错误

我一直在研究MapReduce程序,我遇到了障碍,需要一些帮助.我有一个运行3个作业的程序(作业#2在for循环中运行5次)似乎我的一些mappers和reducer没有正确定义.在编译时,我不断得到“方法不会覆盖或实现超类型中的方法”错误.

这是我的程序的基本结构:

工作1:

FirstMapper
没有减速机

工作2:

第二个映射器
第一减速机

工作3:

最终映射器
最终减速机

这是我如何定义我的映射器和缩减器:

public static class FirstMapper extends Mapper<Object, Text, LongWritable, Vertex>  {
        @Override
        public void map(Object key, Text value, Context context) throws IOException, InterruptedException {}


public static class SecondMapper extends Mapper<LongWritable, Vertex, LongWritable, Vertex> {
        @Override
        public void map(long key, Vertex value, Context context) throws IOException, InterruptedException {}


public static class FirstReducer extends Reducer<LongWritable, Vertex, LongWritable, Vertex> {
        @Override
        public void reduce(Long key, Iterable<Vertex> values, Context context) throws IOException, InterruptedException {}


public static class FinalMapper extends Mapper<LongWritable, Vertex, LongWritable, LongWritable> {
        @Override
        public void map(Long key, Vertex value, Context context) throws IOException, InterruptedException {}


public static class FinalReducer extends Reducer<LongWritable, LongWritable, LongWritable, LongWritable> {
        @Override
        public void reduce(Long key, Iterable<LongWritable> values, Context context) throws IOException, InterruptedException {}

FirstMapper似乎没问题,因为它不会导致错误,但是其他4个做了,我无法弄清楚为什么因为方法签名看起来正确.我最初认为可能是因为我的自定义Vertex类,但它实现了Writable,所以我不确定为什么这会导致问题.任何和所有的帮助将不胜感激.谢谢

最佳答案 您的密钥需要实现WritableComparable接口并匹配您在Mapper和Reducer签名类中指定的类型.例如,在第二个你有:

Mapper< LongWritable,Vertex,LongWritable,Vertex>

但是在地图方法中你使用了很长时间.这需要匹配您在签名中指定的类型,即LongWritable.所以第二张图的参数需要如下所示:

map(LongWritable键,Vertex值,Context上下文)

所有最后四个类都有这个问题.

点赞