java - reducer 不工作或永不接听电话

标签 java eclipse hadoop reduce mapper

驱动类别:

import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;

public class DRIVER {


public static void main(String arg[]) 
{
    try{
    Path in = new Path("aamazon.txt");
    Path out = new Path("/output");

    Configuration conf = new Configuration();

    Job job = Job.getInstance(conf);
    job.setJarByClass(DRIVER.class);
    job.setMapperClass(MAPPER.class);
    job.setReducerClass(REDUCER.class);
    job.setNumReduceTasks(0);

    FileInputFormat.addInputPath(job, in);
    FileOutputFormat.setOutputPath(job, out);

    job.waitForCompletion(true);

    System.out.println("Successful");}

    catch(Exception e){
        System.out.println(e.getMessage());
    }


}
}

映射器类:
import java.io.IOException;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

public class MAPPER extends Mapper<LongWritable,Text,LongWritable,Text>{

@Override
public void map(LongWritable key,Text value,Context con) 
{
    try
    {

        System.out.println(key +"\n"+ value);
        con.write(key, value);

    }

    catch(Exception e)
    {
        System.out.println(e.getMessage()); 
    }
}
}

reducer 类:
import java.io.IOException;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

public class REDUCER extends Reducer<LongWritable,Text,LongWritable,Text>{

@Override
public void reduce(LongWritable key,Iterable<Text> value , Context con) 
{
    System.out.println("reducer");
    try{
    for(Text t:value)
    {

        con.write(key, t);
    }
    }
    catch (Exception e)
    {
        System.out.println(e.getMessage());
    }
}
}

问题:
  • 执行工作直到Mapper
  • Reducer永远不会被称为
  • 如果设置了setNumReduceTasks(0),则Mapper不会被称为

  • 任何想法有什么问题吗?

    最佳答案

    您已将reduce任务的数量设置为零。

        Job job = Job.getInstance(conf);
        job.setJarByClass(DRIVER.class);
        job.setMapperClass(MAPPER.class);
        job.setReducerClass(REDUCER.class);
        job.setNumReduceTasks(0); // this should be greater than 0
    

    即使在那之后,如果它不起作用,请检查您是否对以下行的“/ output”路径具有权限-
        Path out = new Path("/output"); // it is in the root folder. change it to "./output"
    

    关于java - reducer 不工作或永不接听电话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37460312/

    相关文章:

    java - 将数据从一个表插入到另一个表时出错

    python - “模块”对象没有属性 'PortScanner'

    hadoop - 在 Cassandra 中将一张大 table 分成多个小 table ?

    java - Ambari-metrics-collector 服务未启动

    java - fatal error 或无法启动 JNLP

    ubuntu - Ubuntu 或 Android Eclipse 中的 OpenJDK

    java - Akka 远程处理 : Dead Letters after enabling Serialization

    java - 我可以使 Java Number 子类自动装箱和拆箱吗?

    java - 将套接字对象传递给 Android 上的另一个 Activity

    scala - 从 scala 脚本中执行 hdfs 命令