武汉出差大数据项目小结

2014年 2月到3月期间,我在实习期间去武汉出差参与一个项目为某上市网络舆情R公司提供技术解决方案。R公司接下了一个为浙江省政府DNS数据分析的项目,但他们自身没有技术实力去解决海量数据的处理。DNS字段相对较小,所以一天的总量也就 1~2 TB 左右,涉及主要业务有从域名、顶级域名、客户端IP等不同维度出发的不同时间粒度的统计,并且运行有时限要求。

技术方案选择。因为这种处理是定时离线处理的(排除Storm等实时系统),而且他们提供的机器内存测试机才8G,线上也就16G(排除Spark等内存方案),再考虑到开发维护难度等,毫无疑问最佳选择便是MapReduce了。基本流程便是ETL(Extract-Transform-Load,即一般的数据预处理流程),然后做个过滤排重,接着业务统计,最后根据需求分别落地到HDFS、Oracle、Redis、Elastic Search等。

ETL一开始便遇到困难,平均一个小时10g的原始数据,而且是一开始放在单机上,要求半个小时做完处理任务。单机一个小时10g做IO还要走网络去分布式,可能光读取数据时间都不止三十分钟。其实最好的解决方案自然是一开始数据就放到HDFS上,但因为放数据那边的技术受限原因,最好的情况也就是放到FTP而已。因此为了提高数据读取效率,我们首先要求对方写了个一个定时压缩脚本,将数据压缩成gz格式,同时也为了提高MapReduce的IO效率,要求将一个小时数据分割成多个小压缩包,每个大概二十多M左右。这样一来在MapReduce解压缩后的大小基本就接近128M了,也就是我们配置的一个block的大小。同时我们还打开了MapReduce的JVM重用(机器数少但Mapper多),试图通过减少多次重启JVM的开销来达到优化,最后效果不是很明显,毕竟每次跑长时间任务的时间多少都会有误差,JVM重启最多也不过几秒到十几秒,相对来说不算是优化的重点。

一开始需求方本来是希望我们按照那个业务处理流程 ETL -> 排重 -> 统计 -> 同步 来按模块实现的,但是MapReduce瓶颈毕竟在那,纯技术类优化是有极限的,因此最后我们只能对业务流程做优化,将部分可以预处理的任务混合了起来。比如排重本来是要求每个不同维度的统计前做不同维度排重,我们在ETL做了一次排重然后按统计维度分发,如此一来接下来的多个统计MR的IO就大大减少,尽管从不同维度还得再做排重,但是数据量已经下降很多了。

但即使如此,统计时我们一开始仍然不太满意其性能,于是在多Mapper单Reducer的场景下自然而然就想到了应用Combiner。常有人提醒使用Combiner很容易犯些低级错误,这个每个初学Combiner的人应该都知道。当时我踌躇满志的觉得那种低级错误不会犯,于是在一个统计TOP N的任务中使用了Combiner,逻辑很简单,就是每个Combiner筛掉后面的选出TOP N,然后Reducer对来自所有的Combiner的record再统计做TOP N。道理很简单,每个山头选出最厉害的,再将这些最厉害的比一下选出全部中最厉害的,就是一个锦标赛原理嘛!但问题就出在这里了,要保证锦标赛的正确,前提是保证同一个top维度的数据必须在同一个Mapper,但当时读取的时候毕竟不是按top维度的key读取的。于是一开始有种错觉好像效率变快了,但是一看数据发现有不对,反复几次发现问题后,最终还是只能把Combiner去掉。

还有一个比较重要的业务是做diff,要统计相对于上一时间粒度,当前时间粒度新出现或未出现的客户端IP、域名、顶级域名等,类似做个集合差运算。这个设计很简单,读取两个目录的文件(上个时间粒度与当前时间粒度),然后根据读取的文件不同设key,在Reduce端过滤计算。这里要实现MapReduce读取多文件并能知道每条数据来自哪个文件,还要多输出。本来1.0.4内置是有个MultiOutput的,但是当时感觉不好用,于是自己通过看TextOutputFormat的源码重写了一个继承它的多文件读取类,Input也是自己重写的。一切都很美好,但没多久总觉得数据少了很多,挣扎了一两天终于发现bug来自自己写的那个Output,最后同事从Hadoop 1.1.2版本封装了一段MultiOutput类的代码才解决问题。于是最终变成自己写的多输入和抄了Hadoop 1.1.2的多输出共存的局面。

存储方面Redis自然要使用pipeline以及多次重试(Time out太常见了),Oracle自然要做好参数绑定,这些不赘述。

总结一下,我个人从这次项目出差的体会:

  • 技术优化一部分是基础,需要自己养成良好习惯;另外很重要的一步是针对业务做优化,否则在这个层次空谈性能优化有点耍流氓。
  • 在我们选择技术方案的时候,很多时候要靠经验,盲目相信别人的评测或选择常常导致自己会出问题而不知所措。
  • 出问题了代码有机会最好和同事一起做做peer review,常会有意想不到的收获(bug)
  • 对于我们这类经验尚浅的程序员,设计架构方案的时候其实不需要过分地深入思考性能等问题,因为很多问题没有实际做过是想不到的;根据自己已有经验做个初步方案,然后通过发现问题逐渐修改迭代。
时间: 2024-10-08 09:32:43

武汉出差大数据项目小结的相关文章

大数据项目之测试标准化

数据项目确保数据质量是最重要的事. 但作为开发人员的我,一直对代码的热情远高于数据,这是不应该的. 因为凡是涉及到数据的项目,数据质量的重要性远远比代码重要. 理解数据,比优化代码更重要,只有在保证数据质量的前提下,再优化代码才是锦上添花. 责任心是安全之魂,标准化是安全之本. 还有时候,开发周期比较短,开发人员一急躁,没有做完整的测试,或当时办公室温度比较燥, 引发其心理比较烦躁,就极容易造成代码质量的下降,但这些都不重要,最重要的是我们需要有一个 标准化的测试流程,无论在什么样的情况下,代码

大数据项目如何更好应用用例规范管理测试用例

大数据项目如何更好的管理测试用例,其重要性不言而喻:其中最有效的一个方法就是强而有力的执行用例的编写规范:以下是经验总结的用例编写规范.用例编写规范分为两部分:第一部分:功能测试用例编写规范(一)测试用例编写规范:1.需求(算法)文档路径:2.ER-Win.数据字典: 测试目的: 前置条件: 操作步骤:1.2. 预期结果: (二)SQL用例编写规范:1)每个表必须要使用有意义的别名:2)当使用表连接时,要关联的从表字段必须要放在左边,主表字段放在右边: --要求,比例: 正确的示范: selec

阿里,腾讯内部十二个大数据项目,你都有做过吗?

随着社会的进步,大数据的高需求,高薪资,高待遇,促使很多人都来学习和转行到大数据这个行业.学习大数据是为了什么?成为一名大数据高级工程师.而大数据工程师能得到高薪.高待遇的能力在哪?自然是项目经验.下面给大家大概介绍一下在阿里的"双11"."双12"."双旦"即将到来的"618"与腾讯大数据都用上的十二个大数据项目:阿里,腾讯内部十二个大数据项目,你都有做过吗?一个大数据分析项目关键构成如下: 信息采集组.数据清洗组.数据融合

电商大数据项目(二)-推荐系统实战之实时分析以及离线分析

电商大数据项目-推荐系统实战(一)环境搭建以及日志,人口,商品分析http://blog.51cto.com/6989066/2325073电商大数据项目-推荐系统实战之推荐算法http://blog.51cto.com/6989066/2326209电商大数据项目-推荐系统实战之实时分析以及离线分析http://blog.51cto.com/6989066/2326214 五.实时分析Top IP(实时分析Top用户)一)模块介绍电商网站运营中,需要分析网站访问排名前N的IP,主要用来审计是否

电商大数据项目-推荐系统实战之推荐算法(三)

电商大数据项目-推荐系统实战(一)环境搭建以及日志,人口,商品分析http://blog.51cto.com/6989066/2325073电商大数据项目-推荐系统实战之推荐算法http://blog.51cto.com/6989066/2326209电商大数据项目-推荐系统实战之实时分析以及离线分析http://blog.51cto.com/6989066/2326214 (七)推荐系统常用算法协同过滤算法协同过滤算法(Collaborative Filtering:CF)是很常用的一种算法,

Spark 2.x企业级大数据项目实战(实时统计、离线分析和实时ETL)

Spark 2.x企业级大数据项目实战(实时统计.离线分析和实时ETL)全套课程下载:https://pan.baidu.com/s/1mje6bAoLLPrxUIrM-C2VMg 提取码: 9n1x 本门课程来源于一线生产项目, 所有代码都是在现网大数据集群上稳定运行, 拒绝Demo.课程涵盖了离线分析.实时分析绝大部分的场景,通过三个实际生产项目教授如何优雅地集成Hadoop.Spark.HBase.Kafka.Redis.MySQL等相关大数据技术,并实际落地 . 本门课程全程实操,不用担

大数据项目中的QA需要迎接新的挑战

大数据项目中的QA需要迎接新的挑战 根据IDC全球半年度大数据和分析支出指南的最新预测,到2022年全球大数据和业务分析解决方案的收入将达到2600亿美元.在大数据和业务分析解决方案上投资增长最快的行业包括银行(复合年增长率13.3%).医疗.保险.证券和投资服务.电信,每个行业复合年增长率都是12.8%.由此可见,大数据类项目在未来的地位将会越发重要,而作为QA,在大数据项目急速扩张的大背景下,也将迎来新的机遇和挑战. 一.大数据项目的数据特点 大数据项目与传统交付项目的不同之处在于其关注的重

说说这些年做的云计算和大数据项目

入行十几年了,做了不少分布计算.并行计算.内存计算.海量数据处理的项目,按照现在的分类,这些都属于云计算/大数据范畴.今天说说我做过的其中三个项目,只三个.         第一个是我们接到的视频分享网站的视频转码的订单,网站名字就不说了,有替人宣传嫌疑.他们情况是这样,视频网站的内容用MP4格式在网页上播放,但是上传的格式多种多样,我们必须把这些视频统一转换成MP4格式,视频转码的工作想必大家都在自己的电脑上试过,通常一个100M左右的视频转码需要20分钟以上(CPU是Pentium IV).

大数据项目实践:基于hadoop+spark+mongodb+mysql开发医院临床知识库系统

一.前言 从20世纪90年代数字化医院概念提出到至今的20多年时间,数字化医院(Digital Hospital)在国内各大医院飞速的普及推广发展,并取得骄人成绩.不但有数字化医院管理信息系统(HIS).影像存档和通信系统(PACS).电子病历系统(EMR)和区域医疗卫生服务(GMIS)等成功实施与普及推广,而且随着日新月异的计算机技术和网络技术的革新,进一步为数字化医院带来新的交互渠道譬如:远程医疗服务,网上挂号预约. 随着IT技术的飞速发展,80%以上的三级医院都相继建立了自己的医院信息系统