MapReduce 编程模型 & WordCount 示例(下)

简介: 之前在学习大数据的时候,很多东西很零散的做了一些笔记,但是都没有好好去整理它们,这篇文章也是对之前的笔记的整理,或者叫输出吧。一来是加深自己的理解,二来是希望这些东西能帮助想要学习大数据或者说正在学习大数据的朋友。如果你看到里面的东西,让你知道了它,这也是一种进步嘛。说不定就开启了你的另一扇大门呢?

接下来是 reduce task 逻辑:

/**
 * KEYIN VALUEIN 对于map 阶段输出的KEYOUT VALUEOUT
 * <p>
 * KEYOUT :是自定义 reduce 逻辑处理结果的key
 * VALUEOUT : 是自定义reduce 逻辑处理结果的 value
 */
public class WordcountReduce extends Reducer<Text, IntWritable, Text, IntWritable> {
    /**
     * <zhouq,1>,<zhouq,1>,<zhouq,2> ......
     * 入参key 是一组单词的kv对 的 key
     */
    @Override
    protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
        //拿到当前传送进来的 单词
//        String word = key.toString();
        //
        int count = 0;
        for (IntWritable value : values) {
            count += value.get();
        }
        //这里的key  就是单词
        context.write(key, new IntWritable(count));
    }
}

最后是启动类:

/**
 * wc 启动类
 */
public class WordCountDriver {
    public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
        Configuration conf = new Configuration();
        // mapreduce.framework.name 配置成 local 就是本地运行模式,默认就是local
        // 所谓的集群运行模式 yarn ,就是提交程序到yarn 上. 要想集群运行必须指定下面三个配置.
//        conf.set("mapreduce.framework.name", "yarn");
//        conf.set("yarn.resoucemanager.hostname", "mini1");
        //conf.set("fs.defaultFS","com.zhouq.hdfs://mini1:9000/");
        Job job = Job.getInstance(conf);
        //指定本程序的jar 包 所在的本地路径
        job.setJarByClass(WordCountDriver.class);
        //指定本次业务的mepper 和 reduce 业务类
        job.setMapperClass(WordCountMapper.class);
        job.setReducerClass(WordcountReduce.class);
        //指定mapper 输出的 key  value 类型
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);
        //指定 最终输出的 kv  类型
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        //指定job的输入原始文件所在目录
        FileInputFormat.setInputPaths(job,new Path(args[0]));
        //指定job 输出的文件目录
        FileOutputFormat.setOutputPath(job,new Path(args[1]));
        boolean waitForCompletion = job.waitForCompletion(true);
        System.exit(waitForCompletion ? 0 : 1);
    }
}

配置启动类参数:填写输入目录和输出目录,注意输出目录不能存在,不然会执行失败的。

38.jpg

执行我们就用编辑器执行,用本地模式,不提交到hadoop 集群上,执行完成后,去到输出目录下可以看到这些文件:

39.jpg

然后输出一下 part-r-00000 这个文件:40.jpg代码地址:https://github.com/heyxyw/bigdata/blob/master/bigdatastudy/mapreduce/src/main/java/com/zhouq/mr/WordCountDriver.java


最后

希望对你有帮助。后面将会去讲 MapReduce 是如何去运行的。

相关文章
|
12天前
|
分布式计算 Hadoop Java
MapReduce编程模型——在idea里面邂逅CDH MapReduce
MapReduce编程模型——在idea里面邂逅CDH MapReduce
32 15
|
19天前
|
分布式计算 Hadoop Java
Hadoop MapReduce编程
该教程指导编写Hadoop MapReduce程序处理天气数据。任务包括计算每个城市ID的最高、最低气温、气温出现次数和平均气温。在读取数据时需忽略表头,且数据应为整数。教程中提供了环境变量设置、Java编译、jar包创建及MapReduce执行的步骤说明,但假设读者已具备基础操作技能。此外,还提到一个扩展练习,通过分区功能将具有相同尾数的数字分组到不同文件。
21 1
|
11天前
|
存储 分布式计算 Hadoop
MapReduce编程模型——自定义序列化类实现多指标统计
MapReduce编程模型——自定义序列化类实现多指标统计
10 0
|
14天前
|
机器学习/深度学习 分布式计算 并行计算
MapReduce是一种用于并行计算的编程模型和处理大规模数据集的实现
MapReduce是一种用于并行计算的编程模型和处理大规模数据集的实现
24 0
|
18天前
|
存储 分布式计算 Hadoop
Hadoop生态系统详解:HDFS与MapReduce编程
Apache Hadoop是大数据处理的关键,其核心包括HDFS(分布式文件系统)和MapReduce(并行计算框架)。HDFS为大数据存储提供高容错性和高吞吐量,采用主从结构,通过数据复制保证可靠性。MapReduce将任务分解为Map和Reduce阶段,适合大规模数据集的处理。通过代码示例展示了如何使用MapReduce实现Word Count功能。HDFS和MapReduce的结合,加上YARN的资源管理,构成处理和分析大数据的强大力量。了解和掌握这些基础对于有效管理大数据至关重要。【6月更文挑战第12天】
40 0
|
20天前
|
分布式计算 自然语言处理 大数据
【大数据】MapReduce JAVA API编程实践及适用场景介绍
【大数据】MapReduce JAVA API编程实践及适用场景介绍
33 0
|
20天前
|
分布式计算 数据挖掘
通过mapreduce程序统计旅游订单(wordcount升级版)
通过mapreduce程序统计旅游订单(wordcount升级版)
|
20天前
|
分布式计算 大数据
mapreduce 实现带有ex前缀的词频统计wordcount 大作业
mapreduce 实现带有ex前缀的词频统计wordcount 大作业
|
2月前
|
分布式计算 资源调度 Hadoop
MapReduce分布式编程
MapReduce分布式编程
41 1
|
2月前
|
分布式计算 数据可视化 Hadoop
大数据实战——基于Hadoop的Mapreduce编程实践案例的设计与实现
大数据实战——基于Hadoop的Mapreduce编程实践案例的设计与实现
532 0