(1)Hadoop 的第一个程序 WordCount 理解
Hadoop 的第一个程序 WordCount 理解
map and Reduce 相关概念
Map
将数据拆分成一个个键值对, reduce 负责将一个个键值对进行归集, 最后统计出结果
machine1:
# 以下数据是machine1 hdfs 区块的数据
hello hello hello
// 这是machine 1 的 context
[{"hello" : 1},{"hello" : 1},{"hello" : 1}
]
machine2:
# 以下数据是machine2 hdfs 区块的数据
hello abc abc abc
// 这是machine 2 的 context
[{"hello" : 1},{"abc" : 1},{"abc" : 1},{"abc" : 1}
]
Hadoop Word Count 程序
public class WordcountMap extends Mapper<LongWritable, Text, Text, IntWritable> {public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {String line = value.toString();//读取一行数据String str[] = line.split(" ");//因为英文字母是以“ ”为间隔的,因此使用“ ”分隔符将一行数据切成多个单词并存在数组中/*** key 是偏移量,一行的偏移量* value 就是一行的数据* context 可以理解 mapList, 不带去重的map** [* {hello: 1}* {hello: 1}* {abc: 1}....* ]*/for (String s : str) {//循环迭代字符串,将一个单词变成<key,value>形式,及<"hello",1>context.write(new Text(s), new IntWritable(1));}}
}
Reduce
reduce 概念可以理解为归集, 上面每一个机器都已经将数据简单的进行了分组, reduce 就是要把上面的简单分组,进行数据归集,得到我们想要的数据, 比如我们的需求就是, 求所有单词的数量, 假设这个 reduce 操作被分配在 machine 3 进行操作
此时 machine3 上面的归集数据
{"abc" : [{int:1},{int:1},{int:1}],"hello" : [{int:1},{int:1},{int:1},{int:1}],
}
然后我们一个个的key 进行循环, 统计 单词出现了多少次, 然后输出
public class WordcountReduce extends Reducer<Text,IntWritable,Text,IntWritable> {public void reduce(Text key, Iterable<IntWritable> values,Context context)throws IOException,InterruptedException{/*** map 已经将单词拆分, reduce 就做统计* key 就是 hello OR abc....* values 就是 hello OR abc 的数据* 将数据统计后输出*/int count = 0;for(IntWritable value: values) {// 这里是直接计数了,没有使用值count++;}context.write(key,new IntWritable(count));}
}
值得注意的是 hadoop 的 mapReduce 为我们提供了分布式协调, 使我们只需要关注业务处理就行了, 比如上面的
WordcountReduce 的 reduce()
就是处理一个个的key 就完了,
以上代码和数据结构不具真实性, 方便理解, 真实情况,望各位从源码层面探究
(1)Hadoop 的第一个程序 WordCount 理解相关推荐
- Ubantu下hadoop运行第一个例子wordcount过程
Ubantu12.04下hadoop-1.2.1运行第一个例子wordcount过程,分享一下 将WordCount.java文件放在Hadoop安装目录下,并在安装目录下创建输入目录input,目录 ...
- linux运行wordcount,hadoop运行第一个实例wordcount
引语: 这几周事情比较多,两周没写博客了,这周总算把hadoop的实例给运行起来,然后跑了一下官方的wordcount例子(用于统计文件中单词出现的次数). 接下来是我成功运行实例的记录.运行的前提是 ...
- spark 的第一个程序 WordCount(详细注释版)
文章目录 第一种方法 统计单词对应列表的个数 代码 第二种方法 记录单词的次数并聚合 代码 第三种方法 spark特有的聚合方法 代码 思路和代码来自 尚硅谷的spark教程 第一种方法 统计单词对应 ...
- 第一个Hadoop程序——WordCount
概述: 通过前面两篇博客的学习,我们学习了Hadoop的伪分布式部署和完全分布式部署.这一篇文章就来介绍一下Hadoop的第一个程序WordCount.以及在运行代码的过程中遇到的问题. 笔者开发环境 ...
- Hadoop官网的一个WordCount程序
下面是Hadoop官网的一个WordCount程序: package org.myorg;import java.io.IOException; import java.util.*;import o ...
- wordcount linux java_Java笔记---Hadoop 2.7.1下WordCount程序详解
一.前言 在之前我们已经在 CenOS6.5 下搭建好了 Hadoop2.x 的开发环境.既然环境已经搭建好了,那么现在我们就应该来干点正事嘛!比如来一个Hadoop世界的HelloWorld,也就是 ...
- Hadoop示例程序WordCount详解及实例
部分参考:http://www.javaeye.com/topic/606962 1.图解MapReduce MapReduce整体流程图 并行读取文本中的内容,然后进行MapReduce操作 Map ...
- c语言第一个程序详解,一,彻底理解第一个C语言程序 Hello World
对于初学者来说,第一个程序一般都是hello world,而且是照着书上一点一点敲的.所以,在初学者眼中,敲出来的第一个程序代码不过是一堆看不懂的英语.而事实上,C语言作为一门语言,是有语法的.所以这 ...
- 初学Hadoop之图解MapReduce与WordCount示例分析
Hadoop的框架最核心的设计就是:HDFS和MapReduce.HDFS为海量的数据提供了存储,MapReduce则为海量的数据提供了计算. HDFS是Google File System(GFS) ...
最新文章
- codeforces水题100道 第二十七题 Codeforces Round #172 (Div. 2) A. Word Capitalization (strings)...
- 如何学习项目管理?项目管理工具有哪些?
- linux nginx svn 更新前端代码
- 美国已批准马斯克的SpaceX发射1.2万颗卫星 以打造一个天基互联网
- U盘怎么拔?该设备正在使用中,请关闭可能使用该设备的所有程序或窗口
- 【报告分享】2021四大行业品牌蓝V社媒内容运营观察报告.pdf(附下载链接)
- 计算机视觉 AI 工具集 OpenVINO™,是你心目中的深度学习框架 Top1 吗?
- kubernetes相关命令
- 差分进化算法和遗传算法 区别 谁更好
- Linux大棚版redis入门教程(推荐)
- C++中begin、end、front、back函数的用法
- 计算机切换桌面快捷方式,显示桌面快捷键,教您win10怎样快速切换到桌面
- The “fxp/composer-asset-plugin“ plugin was skipped because it requires a Plugin API version (“^1.0“)
- Codeforces1324D Pair of Topics (思维 + 二分)
- 台湾批准联电7.1亿美元投资联芯科技
- 我的sulley安装过程
- Python使用traceback.print_exc()输出异常信息
- web开源框架大汇总
- JMP指令寻址方式总结,JMP BX指令寻址方式是什么
- 蓝桥杯备赛(网站推荐和一些资料)
热门文章
- module 'matplotlib' has no attribute 'verbose'
- mysql所有表查询
- 青龙羊毛——去闲转(教程)
- 【11】nvjdc不能用以后另一种jd ck获取办法
- Cissp-【第4章 通信与网络安全】-2021-3-14(476页-542页)
- echarts 在两点之间画一条线_凭什么?辛辛苦苦画了三个小时,却换来一句“撕了重画”...
- 如何在Eclipse中添加新建包,java文件,工程工具栏按钮
- linux之sed命令n,N,d,D,p,P,h,H,g,G,x解析
- 查找内存泄漏的一个思路
- mysql 存储过程 动态建表_MySQL存储过程动态创建表,数据分表