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 理解相关推荐

  1. Ubantu下hadoop运行第一个例子wordcount过程

    Ubantu12.04下hadoop-1.2.1运行第一个例子wordcount过程,分享一下 将WordCount.java文件放在Hadoop安装目录下,并在安装目录下创建输入目录input,目录 ...

  2. linux运行wordcount,hadoop运行第一个实例wordcount

    引语: 这几周事情比较多,两周没写博客了,这周总算把hadoop的实例给运行起来,然后跑了一下官方的wordcount例子(用于统计文件中单词出现的次数). 接下来是我成功运行实例的记录.运行的前提是 ...

  3. spark 的第一个程序 WordCount(详细注释版)

    文章目录 第一种方法 统计单词对应列表的个数 代码 第二种方法 记录单词的次数并聚合 代码 第三种方法 spark特有的聚合方法 代码 思路和代码来自 尚硅谷的spark教程 第一种方法 统计单词对应 ...

  4. 第一个Hadoop程序——WordCount

    概述: 通过前面两篇博客的学习,我们学习了Hadoop的伪分布式部署和完全分布式部署.这一篇文章就来介绍一下Hadoop的第一个程序WordCount.以及在运行代码的过程中遇到的问题. 笔者开发环境 ...

  5. Hadoop官网的一个WordCount程序

    下面是Hadoop官网的一个WordCount程序: package org.myorg;import java.io.IOException; import java.util.*;import o ...

  6. wordcount linux java_Java笔记---Hadoop 2.7.1下WordCount程序详解

    一.前言 在之前我们已经在 CenOS6.5 下搭建好了 Hadoop2.x 的开发环境.既然环境已经搭建好了,那么现在我们就应该来干点正事嘛!比如来一个Hadoop世界的HelloWorld,也就是 ...

  7. Hadoop示例程序WordCount详解及实例

    部分参考:http://www.javaeye.com/topic/606962 1.图解MapReduce MapReduce整体流程图 并行读取文本中的内容,然后进行MapReduce操作 Map ...

  8. c语言第一个程序详解,一,彻底理解第一个C语言程序 Hello World

    对于初学者来说,第一个程序一般都是hello world,而且是照着书上一点一点敲的.所以,在初学者眼中,敲出来的第一个程序代码不过是一堆看不懂的英语.而事实上,C语言作为一门语言,是有语法的.所以这 ...

  9. 初学Hadoop之图解MapReduce与WordCount示例分析

    Hadoop的框架最核心的设计就是:HDFS和MapReduce.HDFS为海量的数据提供了存储,MapReduce则为海量的数据提供了计算. HDFS是Google File System(GFS) ...

最新文章

  1. codeforces水题100道 第二十七题 Codeforces Round #172 (Div. 2) A. Word Capitalization (strings)...
  2. 如何学习项目管理?项目管理工具有哪些?
  3. linux nginx svn 更新前端代码
  4. 美国已批准马斯克的SpaceX发射1.2万颗卫星 以打造一个天基互联网
  5. U盘怎么拔?该设备正在使用中,请关闭可能使用该设备的所有程序或窗口
  6. 【报告分享】2021四大行业品牌蓝V社媒内容运营观察报告.pdf(附下载链接)
  7. 计算机视觉 AI 工具集 OpenVINO™,是你心目中的深度学习框架 Top1 吗?
  8. kubernetes相关命令
  9. 差分进化算法和遗传算法 区别 谁更好
  10. Linux大棚版redis入门教程(推荐)
  11. C++中begin、end、front、back函数的用法
  12. 计算机切换桌面快捷方式,显示桌面快捷键,教您win10怎样快速切换到桌面
  13. The “fxp/composer-asset-plugin“ plugin was skipped because it requires a Plugin API version (“^1.0“)
  14. Codeforces1324D Pair of Topics (思维 + 二分)
  15. 台湾批准联电7.1亿美元投资联芯科技
  16. 我的sulley安装过程
  17. Python使用traceback.print_exc()输出异常信息
  18. web开源框架大汇总
  19. JMP指令寻址方式总结,JMP BX指令寻址方式是什么
  20. 蓝桥杯备赛(网站推荐和一些资料)

热门文章

  1. module 'matplotlib' has no attribute 'verbose'
  2. mysql所有表查询
  3. 青龙羊毛——去闲转(教程)
  4. 【11】nvjdc不能用以后另一种jd ck获取办法
  5. Cissp-【第4章 通信与网络安全】-2021-3-14(476页-542页)
  6. echarts 在两点之间画一条线_凭什么?辛辛苦苦画了三个小时,却换来一句“撕了重画”...
  7. 如何在Eclipse中添加新建包,java文件,工程工具栏按钮
  8. linux之sed命令n,N,d,D,p,P,h,H,g,G,x解析
  9. 查找内存泄漏的一个思路
  10. mysql 存储过程 动态建表_MySQL存储过程动态创建表,数据分表