读完《Hadoop权威指南》里面有关气象数据集的计算一章后,对于自己以前参与的一个项目有了一些新的想法。
场景:停车场系统,希望统计一年中每月进出车辆的统计分布,原先没有使用hadoop这种分布式架构,就是比较基础的统计。下面以统计每月进入车辆统计为例,进行说明mapreduce。
原始记录中包含车辆进出场的时间,格式“yyyymmddhhmmss”,进/出都有自己的时间,通过不同截取即可得到。
将数据文件存入HDFS,有系统分片分配给个节点。
定义进入map:
1、读取每条记录
2、按照格式截取
3、检查map中是否存在这个的key,如果没有,生成一个,并且value赋值1;如果有,则value+1
4、循环执行1-3,处理分配的数据片。
这个map得到如下形式:
节点一 节点二
【200905,20】 【200902,200】
【200908,200】 【200905,100】
【200909,150】 【200909,210】
处理完成,交由reduce进行合并:
将map函数的处理结果,作为输入。
逻辑如下:
将key相同的并且到一个key中,value值相加。最后结果如:
【200902,200】
【200905,120】
【200908,200】
【200909,360】
得到统计结果。出场以此类推。
mapreduce原理,我认为是利用分布式,进行分而治之的策略,将数据分割成64M(默认),然后又不同的节点去分析,这是每个节点独立运行(节点资源可以认为是独占,而单机多进程并发,还有争夺资源),这样化整为零,计算效率提高;最后将分析结果合并,这个结果要比最初的数据要小的非常多,不是一个数量级的。
整体计算能力、资源使用率等等都要比单机要高。
场景:停车场系统,希望统计一年中每月进出车辆的统计分布,原先没有使用hadoop这种分布式架构,就是比较基础的统计。下面以统计每月进入车辆统计为例,进行说明mapreduce。
原始记录中包含车辆进出场的时间,格式“yyyymmddhhmmss”,进/出都有自己的时间,通过不同截取即可得到。
将数据文件存入HDFS,有系统分片分配给个节点。
定义进入map:
1、读取每条记录
2、按照格式截取
3、检查map中是否存在这个的key,如果没有,生成一个,并且value赋值1;如果有,则value+1
4、循环执行1-3,处理分配的数据片。
这个map得到如下形式:
节点一 节点二
【200905,20】 【200902,200】
【200908,200】 【200905,100】
【200909,150】 【200909,210】
处理完成,交由reduce进行合并:
将map函数的处理结果,作为输入。
逻辑如下:
将key相同的并且到一个key中,value值相加。最后结果如:
【200902,200】
【200905,120】
【200908,200】
【200909,360】
得到统计结果。出场以此类推。
mapreduce原理,我认为是利用分布式,进行分而治之的策略,将数据分割成64M(默认),然后又不同的节点去分析,这是每个节点独立运行(节点资源可以认为是独占,而单机多进程并发,还有争夺资源),这样化整为零,计算效率提高;最后将分析结果合并,这个结果要比最初的数据要小的非常多,不是一个数量级的。
整体计算能力、资源使用率等等都要比单机要高。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26812308/viewspace-747770/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26812308/viewspace-747770/