每个企业或多或少每天都会需要做一个数据统计,来掌握公司的运营情况,看看自己的客户每天是否有增加等等,当客户的数据信息达到一定的程度,单独的使用一台计算机进行计算肯定不行,因此就会需要多台机器同时处理。现在有很多流行的分布式系统,架构设计的很复杂,考虑了各种容错性,协作性,任务分配性等,但是要快速的掌握和部署到实际的机器上还是很困难的。为此,提出一个简单、有效并能根据实际情况灵活开发的大数据处理的架构。
假设条件:
(1)要处理的数据分布在其他的数据记录机上,比如有w1~w12台机器,每台机器收集到数据量相差不大。
(2)现有三台机器stat1~stat3(3台机器的性能和配置相差不大)可供使用的数据统计机器,用来从w1~w12这12台机器上收集数据,并进行处理,得到用户的信息。
(3)如果要统计的数据必须要将w1~w12台机器上的数据全部取回来,并做数据消重,比如说要按照IP消重。如果不需要消重,那么就没有必要将所有的数据都合并在一起,可以分别计算后再求和。
首先: 我们查看w1~w12这12台机器上数据文件大小,并按照从大到小的顺序将数据文件排列,将最大的数据文件分给给stat1,次大的分配给stat2,第三大的分配给stat3,将第四大的分配给stat3,第五大的分配给stat2,第六大的分配给stat1,第七大的分配给stat1,第八大的分配给stat2,等等如此反复,这样stat1~stat3每台机器上对应的数据文件大小就差不多了。如果觉得w1~w12每台机器上的数据文件相差不大,那么就可以按照就近原则,将w1~w4分配给stat1,w5~w8分配给stat2,w9~w12分配给stat3进行处理。
确定每台数据统计机器要处理那些数据后,就可以在每台机器上写一个定时任务,可以同时在每日凌晨的某个时间点,每个stat机器去相应的w机器上去抓取数据,并进行分析。如果要对特定的字段比如IP需要做全局去重(w1~w12),那么我们可以采用简单的方法,将IP做个MD5转换,取MD5的第一个字母做为分割线,把IP分到16个不同的文件中,比如ip1~ip16,这样stat1~stat16每台机器上都会产生16个ip文件。每台stat机器处理完成后,生成一个done文件,表示其任务已经结束。然后处于等待阶段
从stat1~stat3这三台机器中选中一台机器作为master,当其完成抓取数据,将ip分配到16个IP文件中,并生成done文件后,去其他两台stat机器上抓取done文件,如果三台机器的done文件都存在了,那么master就将每台机器上的ip1~ip5文件都拷贝到stat1这台机器上,将ip6~ip10拷贝到stat2这台机器上,其ip11~ip16拷贝到stat3上,master拷贝任务完成后,分别在三台机器上生成一个done1文件,表示分配任务完成。
stat1~stat3的机器在等待过程中,一旦发现有done1文件存在,就分别对分配给自己的ip文件进行处理,比如stat1就会先处理分配给自己的三个ip1进行排序去重得到一个数据,然后对分配给自己的三个ip2文件进行排序去重得到一个数据,如此反复得到5个数据,stat1可以将这5个数据记录到数据库中; stat2和stat3重复stat1的过程,分别得到5和6个数据,也同时放到同一个数据库中,这样,每天就会得到16个数据,我们将这16个数据在数据库中求和,就得到了w1~w12这12台机器上总的去重后的IP数。至此整个过程完成。
在整个过程,任何一个地方都可以设置出错判断,一旦出错可以重复几次该,比如说抓取数据文件,考虑到可能会因为网络原因,导致数据文件抓取不过来,因此可以sleep 10分钟后再去抓取,如果尝试4次都失败,就可以发送报警邮件或者报警短信通知维护人员。
转载请注明:数据分析 » 大数据处理_大数据处理技术