hadoop 之 wordCount流程详解
来源:互联网 发布:云计算行业报告 编辑:程序博客网 时间:2024/06/06 03:57
作为Hadoop的入门程序,我相信大家对wordCount一定不陌生。但是对于刚刚接触Hadoop的人来说,可能很难理解程序运行过程中具体流程是怎么样的。这篇博客我讲讲我对其流程的理解,有错误的地方尽情拍砖。
MapTask
首先我在HDFS上新建了多个word.txt文件,我们知道HDFS作为分布式存储结构,多个word.txt是被随机分布在dataNode上的。效果如图:
其中nameNod作为管理dataNode不参与数据的存储。在运行执行程序时,先来介绍一下MapTask、MrAppMaster的作用。MrAppMaster就像nameNode管理着一个个节点dataNode似的,管理者MapTask。在开始的时候,会选择在某个空闲的dataNode上运行,其他的dataNode上运行着MapTask。
MapTask读取HDFS中的提供的数据源,对数据进行处理。处理的过程如下:读取到的word1.txt中的内容为:
java
c++
jee
hadoop
对其进行读取分析,处理的结果为:
“java”:1,” java”.hashCode%ReduceCount
“c++”:1, “c++”.hashCode%ReduceCount
“jee”:1, “jee”.hashCode%ReduceCount
“hadoop”:1, “hadoop”.hashCode%ReduceCount
“java”:1我想大家是看的明白的,就是表示”java”字符串为一个。hashCode%ReduceCount又是什么东西呢?
解释一下hashCode%ReduceCount是什么意思,针对每个MapTask的执行结果,我们需要将他们交给某个Reducetask执行,Maptask1中的java作为key然后对其做hash再对Reducetask的数量做取余的运算,假设”java”.hashCode%ReduceCount的结果为1那么表示”java”的统计都到第一个ReduceTask中去。这个过程被称为Partitioner。
那么为什么需要这样做呢?随机分给不同的ReduceTask不行吗?这样做是为了保证一个key的输出结果就只有一条,因为如果一个ReduceTask处理了”java”最后统计完会输出比如”java”:8,另外一个Reducetask输出”java”:2,这样在输出的文本就会有两条java的记录存在,达不到统计的效果。把所有的”java”都交给第一个ReduceTask处理,那么最后的结果就是”java”:10。
shuffle
现在已经知道了把哪些数据交给哪个reducetask处理了,但是这样的输出结果还不能作为ReduceTask的输入,需要进过一次shuffle。这里不解释shuffle的细节。我们只需要知道在shuffle会经历Merger的过程,将原本是”java”:1,”java”:1这样的格式转为”java”:{1,1}。因为java在partition的过程已经确定是被第一个ReduceTask处理,所以就到了相应的ReduceTask中去了。
for (IntWritable val : values) {//这就是为什么在count的时候是一个循环遍历了 sum += val.get(); // {1,1}得到sum的值为2}
MrAppMaster中的word.txt是不会被MrAppMaster处理的,因为它是一个管理者,所以会被第二个MapTask执行。当然这些过程都是内置好的,我们不需要关心。
ReduceTask
最后只要每个Reduce去遍历得到的key,然后统计这个key里面的value值的合即可。然后每一个reducetask把结果输出到HDFS即可。
- hadoop 之 wordCount流程详解
- hadoop系列学习之WordCount运行详解
- Hadoop之wordcount源码分析和MapReduce流程分析
- [Hadoop] WordCount运行详解
- hadoop WordCount运行详解
- hadoop 执行Wordcount详解
- Hadoop Wordcount 程序 详解
- Hadoop WordCount 详解
- Hadoop集群WordCount详解
- Hadoop WordCount运行详解
- Hadoop-WordCount运行详解
- Hadoop之WordCount
- Hadoop之运行wordcount
- hadoop 之wordcount
- Hadoop 例子之 WordCount
- Hadoop之WordCount源代码
- hadoop之wordcount
- Hadoop之wordcount有感
- 树莓派下配置samba共享目录以及通过window和linux访问方法
- java API 操作HDFS文件系统
- spring 5.0 引用外部文件 03
- iOS项目框架
- DDoS详解(三.攻击工具)
- hadoop 之 wordCount流程详解
- day11笔记
- centos7.3下关于文件权限
- 双目视觉下空间坐标计算/双目测距
- day12笔记
- 使用mininet构建一个简单的路由实验
- 剖析Disruptor:为什么会这么快?(三)揭秘内存屏障
- day13笔记
- 第二天:浪迹天涯网上商城(1.0版本)--后台管理系统--工程结构