hadoop实例分析之WordCount单词统计分析
WordCount单词统计分析
最近在网上看了hadoop相关资料以及单词计数的一个实例,结合网上的资料和自己的看法简要分析一下执行过程。
MyMapper.java
package com.mpred;
import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
public class MyMapper extends Mapper<LongWritable, Text, Text,IntWritable> {
@Override
protected voidmap(LongWritable key, Text value, Context context)
throws IOException, InterruptedException {
String val=value.toString();
String str[]=val.split(" ");
for(String s:str){
context.write(new Text(s),new IntWritable(1));
}
}
}
MyReducer.java
package com.mpred;
import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
importorg.apache.hadoop.mapreduce.Reducer;
public class MyReducer extends Reducer<Text, IntWritable, Text,IntWritable> {
/* (non-Javadoc)
* @seeorg.apache.hadoop.mapreduce.Reducer#reduce(java.lang.Object,java.lang.Iterable, org.apache.hadoop.mapreduce.Reducer.Context)
*/
@Override
protected voidreduce(Text key, Iterable<IntWritable> values,
Context context)
throws IOException, InterruptedException {
int sum=0;
for(IntWritable val:values){
sum+=val.get();
}
context.write(key,new IntWritable(sum));
}
}
WordCount.java
package com.mpred;
import java.io.IOException;
importorg.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;
importorg.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
public class WordCount {
public staticvoidmain(String[] args) throws IOException, InterruptedException, ClassNotFoundException {
Configuration conf=new Configuration();//加载配置文件
Job job=new Job(conf);//创建一个job,供JobTracker使用
job.setJarByClass(WordCount.class);
job.setMapperClass(MyMapper.class);
job.setReducerClass(MyReducer.class);
FileInputFormat.addInputPath(job,newPath("hdfs://192.168.0.9:9000/hello.txt"));
FileOutputFormat.setOutputPath(job,new Path("hdfs://192.168.0.9:9000/wordcount"));
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(IntWritable.class);
System.exit(job.waitForCompletion(true)?0:1);
}
}
输入文件
hello you
hello me
follow me
followyou
执行流程简要分析:
1. map任务处理
a) 读取文件内容,解析成key、value对。对输入文件的每一行,解析成key、value对。每一个键值对调用一个map函数。
b) 在map函数中可以编写自己的逻辑,对输入的key、value处理,转换成新的key、value输出。
c) 对输出的key、value进行分区。
d) 对不同分区的数据,按照key进行排序、分组。相同key的value放到一个集合中。
2. reduce任务处理
a) 对多个map任务的输出,按照不同的分区,通过网络copy到不同的reduce节点。
b) 对多个map任务的输出进行合并、排序。写reduce函数自己的逻辑,对输入的key、reduce处理,转换成新的key、value输出。
c) 把reduce的输出保存到文件中。
分析以上示例代码:
输入文件的分析:
helloyou //key是0,value是hello you
hello me //key是10,value是hello me
注:map函数的key表示字节偏移量,value表示一行文本内容。
map函数分析:
protected void map(LongWritable key, Text value, Contextcontext)
throws IOException, InterruptedException {
String val=value.toString();
String str[]=val.split(" ");
for(String s:str){
context.write(new Text(s),new IntWritable(1));
}
}
key为偏移量,value为每一行的数据;通过split方法(按空格)分离出每一个单词;然后通过循环输出每一组单词(<hello,1>,<you,1>,<hello,1>,<me,1>)
排序后的结果:<hello,1>,<hello,1>,<me,1>,<you,1>
分组后的结果:<hello,{1,1}>,<me,{1}>,<you,{1}>
reduce函数分析
protected void reduce(Text key, Iterable<IntWritable>values,
Context context)
throws IOException, InterruptedException {
int sum=0;
for(IntWritable val:values){
sum+=val.get();
}
context.write(key,new IntWritable(sum));
}
key为单词,value为单词数的集合;可以看出reduce函数将会被调用3次,每一次调用都会计算values集合的和,然后输出每一组数据
reduce输出后的数据为<hello,2>,<you,1>,<me,1>
至此map和reduce函数执行完毕,将数据写入文件。
hadoop实例分析之WordCount单词统计分析相关推荐
- 运行Hadoop自带的wordcount单词统计程序
1.使用示例程序实现单词统计 (1)wordcount程序 wordcount程序在hadoop的share目录下,如下: 1 2 3 4 5 6 7 8 9 [root@leaf mapreduce ...
- Hadoop伪分布式配置和搭建,hadoop单机安装,wordcount实例测试,hadoop安装java目录怎么找,问题及问题解决方法
Hadoop伪分布式配置和搭建,hadoop单机安装,wordcount实例测试,hadoop安装java目录怎么找,问题及问题解决方法 环境说明 系统:ubuntu18.04 主机名:test1 用 ...
- Hadoop源代码分析
http://wenku.baidu.com/link?url=R-QoZXhc918qoO0BX6eXI9_uPU75whF62vFFUBIR-7c5XAYUVxDRX5Rs6QZR9hrBnUdM ...
- RPC-原理及RPC实例分析
还有就是:RPC支持的BIO,NIO的理解 (1)BIO: Blocking IO;同步阻塞: (2)NIO:Non-Blocking IO, 同步非阻塞; 参考:IO多路复用,同步,异步,阻塞和非阻 ...
- 怎么看调用的接口_Hadoop RPC调用实例分析
以ClientProtocol接口中的rename RPC调用进行一次实例分析. rename方法在ClientProtocol接口中定义,它的两个参数是String类型的,不能直接通过网络传输. 我 ...
- 实现 | 朴素贝叶斯模型算法研究与实例分析
实现 | 朴素贝叶斯模型算法研究与实例分析 (白宁超 2018年9月4日10:28:49) 导读:朴素贝叶斯模型是机器学习常用的模型算法之一,其在文本分类方面简单易行,且取得不错的分类效果.所以很受 ...
- 工控系统的全球安全现状:全球漏洞实例分析
工控系统的全球安全现状:全球漏洞实例分析 一.摘要 运营技术(OT).网络和设备,即工业环境中使用的所有组件,在设计时并未考虑到安全性.效率和易用性是最重要的设计特征,然而,由于工业的数字化,越来 ...
- Hadoop源代码分析(完整图文版) part 1
在网上看到了很多此文章的装载,但是都是纯文字,这篇文章在没有图片的情况下阅读起来意义不大了.花了点时间上传了100多张图片,希望对大家学习hadoop有帮助. Hadoop源代码分析(一) 关键字: ...
- WordCount单词统计笔记
1.在本机的/root目录下,依次创建文件夹data,文本文件word.txt. mkdir -p /root/data vim /root/data/word.txt 键入i,进入编辑模式,输入如下 ...
最新文章
- deny后加to do还是doing_动词后加to do 和 doing 的 记忆口诀
- java 抽象工厂模式简单实例
- Sitemap Celebration(使用嵌套列表的树形导航)
- 解决js动态改变dom元素属性后页面及时渲染问题
- 可以搜python题答案的app-可以搜Python题答案的APP有哪些?
- android rxbus github,RxBus
- 日常工作记录---在虚拟机中进行slam建图
- 计算机网络——FTP网络服务器
- 未成年人勿进 谨以献给1980~1990出生的人(一)
- openssl-1.0.0 的新增功能与欠缺(一)
- 照度/感光度(Lux)
- STM32F407定时器输入捕获
- Salesforce Apex 中常用技能总结(持续更新)
- 【学术期刊】2023CCF推荐的A,B,C类英文科技期刊目录最新发布
- wps表格怎么去掉数字最后的两位
- try except与try finally不同之处
- 软件学院研究方向,对研究方向迷茫的同学一定要看(据说是一位北大软院前辈写的)
- 内丘计算机学校,内丘学校食堂打卡机
- TRIZ创新方法——现代TRIZ理论
- python中如何输入多行文字_python中怎么输入多行字符串 | 学会python
热门文章
- mysql 崩溃恢复_超详细的MySQL数据库InnoDB崩溃恢复机制总结
- Spark2.4.0 SparkEnv 源码分析
- 微服务监控zipkin、skywalking以及日志ELK监控系列
- yum更换本地源、yum下载和源码包安装
- Nhibernate+SQLite 入门实例指南二 类的继承、多态关系
- platform总线的probe函数调用
- Repeater在无数据记录时显示“无相关记录...”
- Lync server 2010 发布拓扑错误0x80070005
- 关系代数——附加的关系运算(1)
- 一起谈.NET技术,C#序列化与反序列化(Serializable and Deserialize)