分布式wordcount思路

首先有三个文件 a.txt ,b.txt,c.txt,放在hdfs上

maptask0 读取a.txt的 0-100M

maptask1读取a.txt 100M-200M

maptask2 读取b.txt 的0-100M

maptask3 读取c.txt的0-100M

maptask4 读取c.txt的100M-60M

每个maptask分别计算自己的wordcount

每处理一个单词,先用这个单词的hashcode模除以3 取余数,因为相同单词的hashcode肯定是一样的,这样就能把单词先在自己的maptask中做一下分类

对于maptask0来说,如果是余数是0就放到 m0r0.txt中,如果是1就放到 m0r1.txt中,如果是2就放到 m0r2.txt中

对于maptask1来说,如果是余数是0就放到 m1r0.txt中,如果是1就放到 m1r1.txt中,如果是2就放到 m1r2.txt中

对于maptask2来说,如果是余数是0就放到 m2r0.txt中,如果是1就放到 m2r1.txt中,如果是2就放到 m2r2.txt中

这里可能不太好理解,为什么每个maptask都要分三个文件去写呢? 我所有的maptask,遇到余数为0的都放到一个文件中,

遇到余数为1的都放到一个文件中,遇到余数为2的都放到一个文件中,直接就分好类了,最后三个reducetask没用啊,

但是要知道 一个文件只可能有一个进程在处理,不可能两个进程一块处理啊。所以只能先分着放,用reducetask去把他们在汇聚起来。理解了这个才能真正明白reducetask的意义 ,Map 分类,reduce汇总

最后reducetask分别取 maptask上拉去自己的文件

reducetask0  m0r0.txt,m1r0.txt,m2r0.txt  ...0.txt

reducetask1  m0r1.txt,m1r1.txt,m2r1.txt  ...1.txt

reducetask2  m0r2.txt,m1r2.txt,m2r2.txt  ...2.txt

每个reduce读取到之后自己的文件之后,把各个文件中的结果,相同的单词加起来,获得自己的结果,r0,r1,r2

最后汇总一下所有 r0 r1 r2 的结果就行了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值