当前位置: 首页 > 知识库问答 >
问题:

Hadoop/MapReduce还原程序不工作

别永年
2023-03-14

请..来个身体救救我!!!!

这是main.class

import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
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.output.FileOutputFormat;


public class Main{
    /**
     * @param args
     * @throws IOException 
     * @throws ClassNotFoundException 
     * @throws InterruptedException 
     */

    static enum Counter{
        CONVERGED
    }

    public static final String CENTROIDS = "centroids";

    public static void main(String[] args) throws IOException, InterruptedException, ClassNotFoundException {

        int iteration = 1;
        long changes = 0;
        Path dataPath = new Path(args[0]);

        //read in the initial cluster centroids.
        Configuration centroidConf = new Configuration();
        Job centroidInputJob = new Job(centroidConf);
        centroidInputJob.setJobName("KMeans Centroid Input");
        centroidInputJob.setJarByClass(Main.class);

        Path centroidsPath = new Path("centroids_0");

        centroidInputJob.setMapperClass(KmeansCentroidInputMapper.class);

        // No Combiner, no Reducer.

        centroidInputJob.setMapOutputKeyClass(Text.class);
        centroidInputJob.setMapOutputValueClass(Text.class);
        centroidInputJob.setOutputKeyClass(Text.class);
        centroidInputJob.setOutputValueClass(Text.class);

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

        if (!centroidInputJob.waitForCompletion(true)) {
            System.err.println("Centroid input job failed!");
            System.exit(1);
        }

        while(true){
            Configuration conf = new Configuration();
            Path nextIter = new Path(String.format("centroids_%s", iteration));
            Path prevIter = new Path(String.format("centroids_%s", iteration - 1));
            conf.set(Main.CENTROIDS, prevIter.toString());

            Job job = new Job(conf);
            job.setJobName("Kmeans " + iteration);
            job.setJarByClass(Main.class);

            job.setJobName("KMeans "+ iteration);


            //Set Mapper, Combiner, and Reducer
            job.setMapperClass(MapClass.class);
            job.setReducerClass(ReduceClass.class);
            job.setMapOutputKeyClass(Text.class);
            job.setMapOutputValueClass(Text.class);
            job.setNumReduceTasks(1);
            job.setCombinerClass(CombineClass.class);
            job.setOutputKeyClass(Text.class);
            job.setOutputValueClass(Text.class);

            //Set input/output paths
            FileInputFormat.addInputPath(job, dataPath);
            FileOutputFormat.setOutputPath(job, nextIter);

            job.setNumReduceTasks(1);
            job.waitForCompletion(true);
            iteration++;
            changes = job.getCounters().findCounter(Main.Counter.CONVERGED).getValue();
            job.getCounters().findCounter(Main.Counter.CONVERGED).setValue(0);
            if(changes<=0){
                break;
            }       
        }   
    }

}

源代码:https://github.com/yezhang1989/k-means-clustering-on-MapReduce

共有1个答案

胥诚
2023-03-14

请命令

job.setNumReduceTasks(1);

并检查它是否工作。

MapReduce作业的默认Reducer为1,因此不需要将其设置为1

 类似资料:
  • 本文向大家介绍Hadoop MapReduce编程的优势,包括了Hadoop MapReduce编程的优势的使用技巧和注意事项,需要的朋友参考一下 大数据基本上是一个涵盖大型和复杂数据集的术语。为了处理它,与传统类型相比,需要使用不同的数据处理应用程序。 尽管有各种应用程序可以处理和处理大数据,但基本框架始终是Apache Hadoop的框架。 什么是Apache Hadoop? Hadoop是一

  • 我试图运行WordCount示例的一个变体,这个变体是,映射器输出文本作为键和文本作为值,而还原器输出文本作为键和NullWritable作为值。 除了地图,减少签名,我把主要的方法是这样的:

  • 我正在使用MapReduce为web搜索建立一个倒排索引。我知道如何使用一个键类型的MapReduce,您在这里设置它: 但是,如果我的密钥可以是不同类型的,那是不是支持呢?例如,一个键可能只是文本,另一个键可能是PairofWritables。我想为从映射器到reducer的输出,以及从reducer到最终输出的输出设置不同的键类型。我已经看到了一个名为MultipleOutput的类,它允许指

  • 一、背景 最近总在弄MR的东西,所以写点关于这个方面的内容,总结一下吧 二、流程描述 说实话,文字描述比较苍白,画了个图,贴出来,大家看看,有问题欢迎指出 三、总结 1、值得提出的是,一个map结束就马上会进行分区的操作。并非是等所有的map都结束才做分区的操作。 2、分组的操作是对key的值进行比较分组。(可以是复合key,也可以是单一的key) 3、关于job.setSortComparato

  • 我正在学习一些MapReduce,但是我遇到了一些问题,情况是这样的:我有两个文件:“users”包含一个用户列表,其中包含一些用户数据(性别、年龄、国家等)...)文件看起来像这样: “歌曲”包含所有用户收听的歌曲的数据(用户ID,收听日期和时间,艺术家ID,艺术家姓名,歌曲ID,歌曲标题): 目标是在某些国家找到k首最受欢迎的歌曲。k和输入中提供的国家列表。 我决定为映射器使用Multiple