文章目录

  • WordCount案例实操
    • 1. 官方WordCount源码
    • 2. 常用数据序列化类型
    • 3. MapReduce编程规范
      • 3.1 Mapper阶段
      • 3.2 Reducer阶段
      • 3.3 Driver阶段
    • 4. 实现WordCount
      • 4.1 搭建环境
      • 4.2 WordCountMapper
      • 4.3 WordCountReduce
      • 4.4 WordCountDriver
    • 5. 测试
      • 本地测试
      • 集群上测试

WordCount案例实操

1. 官方WordCount源码

采用反编译工具反编译源码,发现WordCount案例有Map类、Reduce类和驱动类。且数据的类型是Hadoop自身封装的序列化类型。

2. 常用数据序列化类型

常用的数据类型对应的Hadoop数据序列化类型

Java类型 Hadoop Writable类型
boolean BooleanWritable
byte ByteWritable
int IntWritable
float FloatWritable
long LongWritable
double DoubleWritable
String Text
map MapWritable
array ArrayWritable

3. MapReduce编程规范

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

3.1 Mapper阶段
  1. 用户自定义的Mapper要继承自己的父类
  2. Mapper的输入数据是KV对的形式(KV的类型可自定义)
  3. Mapper中的业务逻辑写在map()方法
  4. Mapper的输出数据是KV对的形式(KV的类型可自定义)
  5. map()方法(MapTask进程)对每一个<K,V>调用一次
3.2 Reducer阶段
  1. 用户自定义的Reducer要继承自己的父类
  2. Reducer的输入数据类型对应Mapper的输出数据类型,也是KV
  3. Reducer的业务逻辑写在reduce()方法
  4. ReduceTask进程对每一组相同k的<k,v>组调用一次reduce()方法
3.3 Driver阶段

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

4. 实现WordCount

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

按照MapReduce编程规范,分别编写Mapper,Reducer,Driver

4.1 搭建环境
  1. 创建maven工程MapReduceWordCount

  2. 引入依赖

        <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.8.2</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>2.7.2</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>2.7.2</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>2.7.2</version></dependency></dependencies>
    
  3. log4j.properties

    log4j.rootLogger=INFO, stdout
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
    log4j.appender.logfile=org.apache.log4j.FileAppender
    log4j.appender.logfile.File=target/spring.log
    log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
    log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
    
4.2 WordCountMapper

注意引包不要引错了!

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;
/*** @Date 2020/7/7 18:17* @Version 10.21* @Author DuanChaojie* 1、LongWritable:表示worder传入KEY的数据类型,默认是一行起始偏移量* 2、Text:表示word传入VALUE的数据类型,默认是下一行的文本内容* 3、Text:表示自己map方法产生产生的结果数据类型KEY* 4、IntWritable:表示自己map方法产生的结果数据的VALUE类型*/
public class WordCountMapper extends Mapper<LongWritable,Text, Text, IntWritable> {Text k = new Text();IntWritable v = new IntWritable(1);@Overrideprotected 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) {k.set(word);context.write(k,v);}}
}
4.3 WordCountReduce
package com.atguigu.mapreduce;import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;import java.io.IOException;/*** @Date 2020/7/7 18:17* @Version 10.21* @Author DuanChaojie*/
public class WordCountReduce extends Reducer<Text, IntWritable, Text,IntWritable> {int sum;IntWritable v = new IntWritable();@Overrideprotected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {// 1.累加求和sum = 0;for (IntWritable value : values) {sum += value.get();}// 2.输出v.set(sum);context.write(key,v);}
}
4.4 WordCountDriver
import org.apache.hadoop.conf.Configuration;
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;import java.io.IOException;/*** @Date 2020/7/7 18:17* @Version 10.21* @Author DuanChaojie*/
public class WordCountDriver {public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {// 1,获取配置信息以及封装任务Configuration conf = new Configuration();Job job = Job.getInstance(conf);// 2,设置jar加载路径job.setJarByClass(WordCountDriver.class);// 3,设置map和reduce类job.setMapperClass(WordCountMapper.class);job.setReducerClass(WordCountReduce.class);// 4,设置map输出job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(IntWritable.class);// 5,设置最终输出kv类型job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class);// 6,设置输入和输出路径FileInputFormat.setInputPaths(job,new Path(args[0]));FileOutputFormat.setOutputPath(job,new Path(args[1]));// 7,提交boolean result = job.waitForCompletion(true);System.exit(result ? 0:1);}
}

5. 测试

本地测试

设置参数

结果

集群上测试

用maven打jar包,需要添加的打包插件依赖

    <build><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><version>2.3.2</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin><plugin><artifactId>maven-assembly-plugin </artifactId><configuration><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs><archive><manifest>
<!--为自己工程主类-->                            <mainClass>com.atguigu.mapreduce.WordCountDriver</mainClass></manifest></archive></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins></build>

MapReduceWordCount-1.0-SNAPSHOT.jar重命名为wc.jar之后拷贝到Hadoop集群中。

启动Hadoop集群

执行WordCount程序

hadoop jar  wc.jar com.atguigu.mapreduce.WordCountDriver /user/atguigu/input /user/atguigu/output

执行后的结果

下载后查看内容

2. WordCount案例实操相关推荐

  1. MapReduce入门(一)—— MapReduce概述 + WordCount案例实操

    MapReduce入门(一)-- MapReduce概述 文章目录 MapReduce入门(一)-- MapReduce概述 1.1 MapReduce 定义 1.2 MapReduce 优缺点 1. ...

  2. 大数据培训课程WordCount案例实操

    WordCount案例实操 1.需求 在给定的文本文件中统计输出每一个单词出现的总次数 (1)输入数据 (2)期望输出数据 atguigu   2 banzhang 1 cls   2 hadoop  ...

  3. 尚硅谷大数据技术Spark教程-笔记09【SparkStreaming(概念、入门、DStream入门、案例实操、总结)】

    尚硅谷大数据技术-教程-学习路线-笔记汇总表[课程资料下载] 视频地址:尚硅谷大数据Spark教程从入门到精通_哔哩哔哩_bilibili 尚硅谷大数据技术Spark教程-笔记01[SparkCore ...

  4. Spark转换算子大全以及案例实操

    1.RDD 转换算子 RDD转换算子实际上就是换了名称的RDD方法 RDD 根据数据处理方式的不同将算子整体上分为 Value 类型.双 Value 类型和 Key-Value 类型 算子:Opera ...

  5. 新硬盘挂载-fdisk+mount案例实操

    新硬盘挂载-fdisk+mount案例实操 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 现在很多服务器都支持热插拔了,当有新的硬盘插入到服务器上我们需要将其分区,格式化,然后挂载 ...

  6. 数据模型同学看过来|代码案例实操来袭

    去年年底,央行开出反洗钱罚单,多家银行合计被罚1040万元. 当时,中国人民银行石家庄中心支行披露的反洗钱行政处罚信息公示表显示,因涉及未按照规定履行客户身份识别义务等,中行.邮储.浦发三家银行以及阳 ...

  7. 【报告分享】见实私域流量白皮书:私域流量案例实操手册.pdf

    大家好,我是文文(微信:sscbg2020),今天给大家分享见实科技于2020年10月份发布的报告<见实私域流量白皮书:私域流量案例实操手册.pdf>. 本报告共73页,包含如下鞋服.餐饮 ...

  8. 自定义OutputFormat案例实操

    自定义OutputFormat案例实操 文章目录 1)需求 2)需求分析 3)编程实现 1.创建Mapper类 2.创建Reducer类 3.创建OutputFormat类 4.创建RecordWri ...

  9. Azkaban配置Work Flow案例实操

    Work Flow案例实操 目录 Work Flow案例实操 1. Yarm语法简介 2. HelloWorld案例 3. JavaProcess案例 4. 作业依赖案例 5. 自动失败重试案例 6. ...

最新文章

  1. Windows安装Zookeeper和Dubbo(单机版本)
  2. 什么是三极管的倒置状态及其作用!
  3. Tornado 学习笔记
  4. opencv学习笔记4:获取图像属性
  5. 字节输出流写入数据到文件
  6. 你见过扇贝游泳吗? | 今日趣图
  7. 判断 iframe 是否加载完成的完美方法(转)
  8. 阿里大鱼php发送短信,阿里大鱼短信发送PHP代码
  9. ”扶我起来,我还能学!“ 之ES2021 抢先尝
  10. 图论(一)—— 基本概念
  11. ffmpeg filter 实现画面旋转
  12. 幂次方计算_收藏!机考计算器用法汇总,算题速度提高几倍
  13. ubuntu常用命令(未整理)
  14. IDC将中国城市分成六级:每一级具体的城市是那几个市,谢谢回复
  15. Django ORM 使用手册
  16. 经典的广告词及其翻译
  17. 虚拟机配置opc服务器,组态王怎么配置成opc服务器
  18. 隐藏通信隧道技术(下)
  19. [zz]浅谈自然语言处理(NLP)和 自然语言理解(NLU)
  20. SFFAI分享 | 张杰:针对图像处理网络的模型水印【附PPT与视频资料】

热门文章

  1. 当我们老了,又会怎样
  2. QQ群信息爬取-------抓包破解接口(2)
  3. SNS游戏服务器架构随笔
  4. C语言实现字符串压缩
  5. 7-1 求两点之间距离
  6. 基于BOOTSTRAP方法的投资方案分析
  7. word-200-1
  8. 06-20210224华为海思Hi3518EV300鸿蒙系统的uboot编译
  9. linux进pe读不到硬盘,进入PE后不显示硬盘的解决办法
  10. HCIP datacom 821、831题库