Hadoop | MapReduce学习笔记(一)使用Java实现MapReduce编程 | 打包词频统计程序为jar包提交到Hadoop集群并运行 | Mapper、Reducer、Driver

本文介绍了Hadoop MapReduce的编程规范,包括Mapper、Reducer和Driver阶段,并通过WordCount案例详细解释每个阶段的功能。此外,还讲述了如何将MapReduce程序打包为jar包,并提交到Hadoop集群运行及调试。
摘要由CSDN通过智能技术生成

参考资料


视频链接

运行环境


  • windows10
  • CentOS7虚拟机
  • JDK8
  • Hadoop3.1.3

一、Java MapReduce 编程规范


用于编写的程序分为三个部分:Mapper、Reducer和Driver

1.1 Mapper阶段

  1. 用户自定义的Mapper需继承自己的父类
  2. Mapper的输入数据是KV对的形式(KV类型可自定义)
  3. Mapper中的业务逻辑卸载map() 方法中
  4. Maper的输出数据是KV对的形式(KV类型可自定义)
  5. map()方法(MapTask进程)对每一个<K,V>调用一次

1.2 Reduce阶段

  1. 用户自定义的Reducer要继承自己的父类
  2. Reducer的输入数据类型赌赢Mapper的输出数据类型,也是KV、
  3. Reducer的业务逻辑写在reduce()方法中
  4. ReduceTask进程对每一组相同k的<K, V> 组调用一次reduce()方法

1.3 Driver阶段

相当于YARN集群的客户端,用于提交我们整个程序到YARN集群,提交的是封装了MapReduce程序相关运行参数的Job对象。

二、WordCount 案例

需求:在给定的文本文件中统计输出每一个单词出现的总次数

测试数据:

hello wolrd
hello spark
my name is uni
hadoop is nice
hadoop

预期结果:

hello 2
hadoop 2
is 2
my 1
name 1
nice 1
spark 1
uni 1
world 1

2.1 Mapper

  1. 将MapTask传给文本内容,先转换成String
  2. 根据空格将这一行切分成单词
  3. 将单词转化为<单词, 1> 的形式
    WordCountMapper.java
package com.uni.mr.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;

/** 词频统计
 * <KEYIN, VALUEIN, KEYOUT, VALUEOUT>
 * KEYIN , map 阶段输入key的类型: LongWritable
 * VALUEIN, map 阶段输入value的类型: Text
 * KEYOUT, map 阶段输出vkey的类型:Text
 * VALUEOUT, map阶段输出的value类型:IntWritable
 */
public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
   
    // 放在上面声明防止在循环里多次创建对象,浪费空间
    private Text outKey = new Text();
    private IntWritable outValue = new IntWritable(1);
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
   
        // 1. 获取一行
        String line = value.toString();
        // 2. 切割
        String[] words = line.split(" ");
        // 3. 循环写出
        for (String word : words) {
   
            // 封装 outKey
            outKey.set(word);
            context.write(outKey, outValue);
        }
    }
}

2.2 Reducer

  1. 汇总各个key的个数
  2. 输出该key的总次数

WordCountReducer.java

package com.uni.mr.wordcount;

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

import java.io.IOException;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值