关于map reduce的一点思考

最近看了一篇map reduce的文章,个人感觉map reduce就是一个拆跟一个合的过程,这跟前端工程模块化里的拆跟合很相似,前端工程变大了之后,要把任务分解,所以有了模块化的管理工具,最后用工程化的方式再把各个模块合起来。

同样map reduce的拆也是为了更好地合,只不过map reduce是为了解决一个个具体的任务,map是站在分解任务的角度来讲的,任务最初的状态是怎样的,怎样分解最合适,而合是站在任务最终得到的结果的角度上来讲的,即任务最终要得到的形式是怎样的,按照这个形式拆开得到的结果就是任务最初分解之后得到的中间结果再一次聚合得到的形式。

如果连任务最终达到的结果形式都不知道,那就无法对结果形式进行分解,进而也就无法得知任务初步分解后该怎样进行进一步的处理。

首先,从1970-01-01开始,每半小时一个周期,先按机器的ip或者hostname的hashcode对broker总数取模,这样得出每个broker在Map阶段要处理的数据,然后对每个采集对象这个周期的统计数据进行计算,得出健康状态和故障信息,对broker上所有彩信数据进行按维度汇总,每个维度就是用户最终需要关注的,如机器的厂家、产品线、机型、机房,每个特定厂家(如联想、公示硕、cm3、cm4)都是一个特定的维度,也就是最终汇总的维度,在一台broker上汇总完后,然后按照维度id对broker总数取模后得到值就是所有broker ip排序过后组成的数据的下标,然后把第一步按维度聚合的信息发送给计算得出的broker,这就是Map阶段, reduce阶段就是对相同维度的信息进行聚合,其实这里有两个定时任务的,第一个定时任务是每隔20秒就把map的结果刷到reduce的机器上去,第二个定时任务每隔20秒把reduce的结果刷到hbase,刷之前判断当前时间跟存储数据周期的endTime相隔是否超过一定时间,超过则刷盘。因为脚本的运行时间是每半小时一次,所以总的定时任务也是每半小时一次,这一点可以优化掉。
mapKey:dimensionId/monitorItemId/startTime/endTime, Map<Map<String, String>, Map<String, DataItemValue>>

posted @ 2016-09-03 22:44  john8169  阅读(97)  评论(0编辑  收藏  举报