Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 使用零reduce节点在Mapreduce中实现简单排序程序时出错_Sorting_Hadoop_Mapreduce - Fatal编程技术网

Sorting 使用零reduce节点在Mapreduce中实现简单排序程序时出错

Sorting 使用零reduce节点在Mapreduce中实现简单排序程序时出错,sorting,hadoop,mapreduce,Sorting,Hadoop,Mapreduce,我尝试在mapreduce中实现一个排序程序,这样在map阶段之后,排序由hadoop框架内部完成,我只得到排序后的输出。为此,我尝试将reduce任务的数量设置为零,因为不需要任何缩减。现在,当我尝试执行程序时,我不断得到校验和 错误。。我不知道下一步该做什么。当然,在我的上网本上运行这个程序是可能的,因为当我将reduce任务设置为1时,排序确实工作得很好。。请帮忙 以下是我为执行排序而编写的全部代码,供您参考: /* * To change this template, cho

我尝试在mapreduce中实现一个排序程序,这样在map阶段之后,排序由hadoop框架内部完成,我只得到排序后的输出。为此,我尝试将reduce任务的数量设置为零,因为不需要任何缩减。现在,当我尝试执行程序时,我不断得到校验和 错误。。我不知道下一步该做什么。当然,在我的上网本上运行这个程序是可能的,因为当我将reduce任务设置为1时,排序确实工作得很好。。请帮忙


以下是我为执行排序而编写的全部代码,供您参考:

    /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author root
 */
import org.apache.hadoop.mapred.*;
import org.apache.hadoop.io.*;
import java.util.*;
import java.io.*;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.util.*;
import org.apache.hadoop.conf.*;


public class word extends Configured implements Tool
{
    public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable>
    {
        private static IntWritable one=new IntWritable(1);
        private Text word=new Text();

        public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter report) throws IOException
        {
            String line=value.toString();
            StringTokenizer token=new StringTokenizer(line," .,?!");
            String wordToken=null;

            while(token.hasMoreTokens())
            {
                wordToken=token.nextToken();
                output.collect(new Text(wordToken), one);

            }
        }

    }

    public int run(String args[])throws Exception
    {
        //Configuration conf=getConf();
        JobConf job=new JobConf(word.class);
        job.setInputFormat(TextInputFormat.class);

        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        job.setOutputFormat(TextOutputFormat.class);
        job.setMapperClass(Map.class);
        job.setNumReduceTasks(0);

        FileInputFormat.addInputPath(job, new Path(args[0]));
        FileOutputFormat.setOutputPath(job, new Path(args[1]));

        JobClient.runJob(job);

        return 0;
    }

    public static void main(String args[])throws Exception
    {
        int exitCode=ToolRunner.run(new word(), args);
        System.exit(exitCode);

    }
}

因此,请查看0.20.2中第600行附近的
org.apache.hadoop.mapred.MapTask

  // get an output object
  if (job.getNumReduceTasks() == 0) {
     output =
       new NewDirectOutputCollector(taskContext, job, umbilical, reporter);
  } else {
    output = new NewOutputCollector(taskContext, job, umbilical, reporter);
  }
如果将reduce任务数设置为零,它将直接写入输出。
NewOutputCollector
将使用所谓的
MapOutputBuffer
进行溢出、排序、组合和分区


因此,如果不设置减速机,则不会进行排序,即使Tom White在最终指南中指出了这一点。

因此,请查看0.20.2中第600行附近的
org.apache.hadoop.mapred.MapTask

  // get an output object
  if (job.getNumReduceTasks() == 0) {
     output =
       new NewDirectOutputCollector(taskContext, job, umbilical, reporter);
  } else {
    output = new NewOutputCollector(taskContext, job, umbilical, reporter);
  }
如果将reduce任务数设置为零,它将直接写入输出。
NewOutputCollector
将使用所谓的
MapOutputBuffer
进行溢出、排序、组合和分区


因此,如果您不设置减速机,则不会进行排序,即使Tom White在最终指南中对此进行了说明。

我也遇到了同样的问题(0处的文件部分-00000的校验和错误)。我通过将文件重命名为-00000以外的任何其他名称解决了此问题。

我也遇到了同样的问题(0处文件部分-00000的校验和错误)。我通过将文件重命名为-00000以外的任何其他名称解决了这个问题。

因此,如果您至少需要一个Reducer来进行内部排序,那么您可以使用IdentityReducer

您可能还希望看到以下讨论:

因此,如果您至少需要一个减速机来进行内部排序,那么您可以使用IdentityReducer

您可能还希望看到以下讨论:

即使在即时映射输出上完成排序,也不会有没有减缩器的排序;)@ThomasJungblut-好吧,谢谢你的回答,但我不认为如果我们不使用减缩器,我们就不能对输出进行排序。我还参考了Tom White的《Hadoop最终指南》一书,如第233页所述,我们当然可以通过将reduce tasks设置为零来对输出进行排序哦,是的,我在hadoop安装的伪分布式模式下工作,那么这与我面临的问题有什么关系吗?Thanx.即使是Tom有时也可能是错的;)看到我的答案了。你能发布校验和堆栈跟踪吗?@Chris-已经发布了上面的校验和错误。如果我的笔记本电脑的硬件配置出现这样的错误,一定要让我知道。我尝试在hadoop示例jar文件中执行其他示例排序程序,但在运行这些程序时仍然出现校验和错误。即使在即时映射输出上完成排序,也不会有没有减缩器的排序;)@ThomasJungblut-好吧,谢谢你的回答,但我不认为如果我们不使用减缩器,我们就不能对输出进行排序。我还参考了Tom White的《Hadoop最终指南》一书,如第233页所述,我们当然可以通过将reduce tasks设置为零来对输出进行排序哦,是的,我在hadoop安装的伪分布式模式下工作,那么这与我面临的问题有什么关系吗?Thanx.即使是Tom有时也可能是错的;)看到我的答案了。你能发布校验和堆栈跟踪吗?@Chris-已经发布了上面的校验和错误。如果我的笔记本电脑的硬件配置出现这样的错误,一定要让我知道。我尝试在hadoop示例jar文件中执行其他示例排序程序,但在运行它们时仍然出现校验和错误。。