1 问题背景
深圳通地铁交通数据的处理,判断某一时间段内,任意两个不同地铁站间的流量统计,例如从地铁A站入站,从地铁B站出站的人数,在mapreduce操作里面本质上是一个分布式的join操作。
2 第一次测试
在第一次测试中,数据集73GB,集群有3个计算节点,机器配置(16核,16GB内存),集群配置(map slot和reduce slot个数均为6,java虚拟机内存大小200m,iobuffer=128k,其他值默认)
程序设置不同的reduce个数运行3次,每次分别采用1,8,和16个reduce,三次运行时间分别为:
Reduce个数 |
1 |
8 |
16 |
程序运行时间 |
48分48秒 |
18分40秒 |
18分5秒 |
3 第二次测试
本次测试采用了3个不同大小数据集,分别为20G,40G,98G,集群计算节点4个,配置与第一次基本相同,Ruduce个数为设置为24,三个数据集分别运行的时间是,2分20秒,7分4秒,14分2秒。
数据集大小 |
20G |
40G |
98G |
程序运行时间 |
2分20秒 |
7分4秒 |
14分2秒 |
三次运行过程的对比
由于不同数据集数据的计算密度大小不一,结果中各阶段所耗时间并没有表现出严格的正比关系。
4 98G数据集程序分析
各阶段总耗时对比图
mapattempt
map task的平均耗时11.7秒,图中红色部分所占比例极小,程序输入数据块的默认大小为64M,为加快运行速度,输入数据块的大小可以尝试为128M,甚至是512M,应该有较大的优化空间。