MapReducer——分析WordCount数据处理的过程并开发WordCount(1)

学习MapReduce程序开发,入门的第一个Demo就是WordCount。因此,分析WordCount数据处理的过程(非常、非常、非常重要)。下图是:分析WordCount数据处理的过程。

WordCount数据处理过程:

开发WordCount程序:

项目结构:

WordCountMapper.java

package com.wordcount;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;

// 实现Map的功能
//                                                k1       v1   k2       v2
public class WordCountMapper extends Mapper<LongWritable, Text,Text, IntWritable> {
    @Override
    protected void map(LongWritable k1, Text v1, Context context) throws IOException, InterruptedException {
        /**
         * context :Map的上下文
         * 上文 :HDFS
         * 下文 :Reducer
         */
        // 得到数据   I love Beijing
        String data = v1.toString();
        // 分词
        String[] words = data.split(" ");
        // 输出     k2  v2
        for (String s:words) {
            //                 k2             v2
            context.write(new Text(s),new IntWritable(1));
        }
    }
}

 

WordCountReducer.java

package com.wordcount;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;

// 实现Reducer功能
//                                             k3      v3        k4       v4
public class WordCountReducer extends Reducer<Text, IntWritable,Text,IntWritable> {
    @Override
    protected void reduce(Text k3, Iterable<IntWritable> v3, Context context) throws IOException, InterruptedException {
        /**
         * context是Reducer的上下文
         * 上文 :Map
         * 下文 :HDFS
         */
        int total = 0;
        for (IntWritable v:v3) {
            // 求和
            total += v.get();
        }
        //输出 k4 v4
        context.write(k3,new IntWritable(total));
    }
}

WordCountMain.java 

package com.wordcount;

import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
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 WordCountMain {
    public static void main(String[] args) throws Exception {
        //1.创建一个任务
        Job job = Job.getInstance();
        job.setJarByClass(WordCountMain.class);// 任务的入口
        //2.指定任务的map和map输出的数据类型
        job.setMapperClass(WordCountMapper.class);
        job.setMapOutputKeyClass(Text.class);// k2的数据类型
        job.setMapOutputValueClass(IntWritable.class);// v2的类型
        //3.指定任务的reduce和reduce的输出的数据类型
        job.setReducerClass(WordCountReducer.class);
        job.setOutputKeyClass(Text.class);// k4的类型
        job.setOutputValueClass(IntWritable.class);// v4的类型
        //4.指定任务的输入路径、任务的输出路径
        FileInputFormat.setInputPaths(job,new Path(args[0]));
        FileOutputFormat.setOutputPath(job,new Path(args[1]));
        //5.执行任务
        job.waitForCompletion(true);
    }
}

将WordCount项目打包成jar包,并将jar包上传到服务器,并执行如下命令:

hadoop jar wordcount.jar /input/data.txt /output/wordcount

 

可以登陆到hadoop控制台,查看任务执行的进度:

查看执行结果:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上善若水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值