Wordcount以及数据去重

本文详细介绍了Hadoop中的WordCount处理过程,包括MapReduce的map和reduce阶段,以及完整代码示例。此外,还展示了如何利用Hadoop进行数据去重,帮助理解Hadoop在数据处理中的应用。
摘要由CSDN通过智能技术生成

WordCount入门实例

1、处理过程

WordCount:统计文本中每类单词的出现次数。

1)将文件拆分成splits,由于测试用的文件较小,所以每个文件为一个split,并将文件按行分割形成<key,value>对。

  • 这一步由MapReduce框架自动完成,其中偏移量(即key值)包括了回车所占的字符数(Windows和Linux环境会不同)。
  • 偏移量:存储单元的实际地址与其所在段的段地址之间的距离

2)将分割好的<key,value>对交给用户定义的map方法进行处理,生成新的<key,value>对.

3)得到map方法输出的<key,value>对后,Mapper会将它们按照key值进行排序,并执行Combine合并过程,将key值相同的value值累加,得到Mapper的最终输出结果,并写入磁盘。

4)Reducer先对从Mapper接收的数据进行排序,并将 key 值相同的 value 值合并到一个 list 列表中,再交由用户自定义的reduce方法进行处理,得到新的<key,value>对,并作为WordCount的输出结果。

2、代码分析

一、import:架包

  • io里边是文件读取所用到的,即input/output 输入输出,用来操作流。
  • util代表工具类,包含一些日期转换、字符串处理、获取编译环境信息。
  • mappper中存放查询时使用的sql。
  • apache是个非盈利组织,起产品一般都用org开头。org说明这是一个开源的包,可以让任何人免费使用。
  • GenericOptionsParser是hadoop框架中解析命令行参数的基本类。它能够辨别一些标准的命令行参数,能够使应用程序轻易地指定namenode,jobtracker,以及其他额外的配置资源。

①setInputFormat:设置map的输入格式,默认为TextInputFormat,key为LongWritable, value为Text

②setNumMapTasks:设置map任务的个数,此设置通常不起作用,map任务的个数取决于输入的数据所能分成的input split的个数

③setMapRunnerClass:设置MapRunner, map task是由MapRunner运行的,默认为MapRunnable,其功能为读取input split的一个个record,依次调用Mapper的map函数

④setMapOutputKeyClass和setMapOutputValueClass:设置Mapper的输出的key-value对的格式

⑤setOutputKeyClass和setOutputValueClass:设置Reducer的输出的key-value对的格式

⑥setPartitionerClass和setNumReduceTasks:设置Partitioner,默认为HashPartitioner,其根据key的hash值来决定进入哪个partition,每个partition被一个reduce task处理,所以partition的个数等于reduce task的个数

⑦setOutputFormat:设置任务的输出格式,默认为TextOutputFormat

1)Map过程

public class Main{//Main是类名,要用public class进行修饰,java程序由类(class)组成,一个源文件可以包含多个类
/*

​ Mapper 静态内部类

​ Mapper类:实现了Map功能基类

​ 建立Mapper类TokenizerMapper继承自泛型类Mapper

*/

public static class TokenizerMapper

extends Mapper<Object, Text, Text, IntWritable>

/LongWritable,Text,IntWritable用于封装Java数据类型的类/

{

/Mapper<KEYIN, VALUEIN, KEYOUT, VALUEOUT>

行偏移量 输入值 输出key 输出值/

​ public void map(LongWritable key,Text value,Context context)throws IOException,InterruptedException{

​ Text keyout;//定义整数1,每个单词计数一次
​ IntWritable valueOut = new IntWritable (1);
/*

构造一个用来解析输入value值的 StringTokenizer对象
Java默认的分隔符是"空格""制表符(’\t’)"“换行符(’\n’)”"回车符(’\r’)"

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值