谈时代下的大数据分析与挖掘系统
任何比较关注业界新闻的人,都会知道最近一两年IT行业的几个关键字:移动端、LBS、SNS和大数据。前边三个,大家应该是很熟悉的,因为身边早已充斥着相关的应用。唯独最后一个大数据,在大部分人眼中却是非常陌生的,除了知道如数据挖掘、智能推荐等几个看似非常高深的词汇之外,却是不知其里的。
首先,笔者需要告诉大家,数据有什么价值。很多人可能认为,数据只是一堆数字,是没什么价值的。其实这些人很可能早已可能享受到数据的红利。例如早在2006年中旬上线的百度指数( index.baidu.com ),其实就是一个基于大数据的数据产品的雏形,但是还不能说是完整的大数据产品。百度指数是用以反映关键词在过去30天内的网络曝光率及用户关注度,它能形象地反映该关键词的每天的变化趋势,以及显示这些搜索的地区分布和简单的人群属性。百度指数的数据被大量的用作针对百度甚至其它一些搜索引擎的SEO的参照,也经常被一些研究公司、学者引用作为一些研究报告的参考数据。
在百度指数之后,阿里巴巴集团亦推出了淘宝指数,相对于百度指数,淘宝指数( http://shu.taobao.com )是一个更加完备的数据产品,用户可以在淘宝指数中搜索任何一个关键词,得到这个关键词在淘宝(天猫)上的搜索/成交趋势、人群信息(如性别、年龄、星座、地区、爱好)等等,还可以查询从这个关键词出发的淘宝上的相关商品、商品属性、品牌等的销售情况,以及对任意人群信息组合(例如25-30岁北京女性)下的相关交易信息。淘宝指数目前亦是免费开放,只要使用淘宝帐号登录即可,通过淘宝指数,我们可以很轻松的发现很多很有趣的事情:
例如通过查看“周大福钻石”的搜索和成交信息, 我们可以很清楚的看到,从2011-08-01到2012-11-30,487天来搜索周大福钻石的人群中有68%的女性和32%的男性,但是在购买周大福钻石的人群中,却是100%的男性。再例如对比“加多宝”和“王老吉”,我们很容易就会看到,从今年四月中旬加多宝出现之后,王老吉的搜索量明显下降,加多宝则直线上升,在9月12日前后,两者的曲线发生了历史性的交汇。
淘宝指数的开发团队(注:暨集团-cdo-数据平台与产品部)从2010年开始还推出了针对淘宝(天猫)商家的收费数据产品数据魔方,基于淘宝上品牌、属性等提供更加详细的多维度的数据组合查询。同时新浪微博还推出了新浪微指数,优酷推出了优酷指数,这些直接呈现数据,以数据的统计、挖掘、汇总、分析为主题的产品,是大数据时代的第一种产物。
大数据时代中还有一类产物便是基于大数据分析和挖掘的能力,针对用户进行个性化的信息推送的产品,目前美国亚马逊、阿里巴巴集团旗下的淘宝网等电子商务网站中,这种产品均在越来越广泛的得到应用,并取得了很好的转化效果,比传统的导购模式表现出了更高的转化率(可以理解为看这些页面的人中实际购买这些页面呈现的商品的人的比例)。另外在网站的后台,基于大数据的BI(商业智能)分析更是早已为网站的运营人员和规划人员提供了宝贵的信息支持。目前国内外也有很多数据公司通过构建大数据分析系统来服务各类企业的BI部门。
看到这里,有些人可能觉得,所谓的数据产品仅仅是对数据进行一些统计分析,然后呈现出来,没什么了不起的。这么说从某种意义上来讲所言非虚,但是,笔者希望本文的读者在任何时候都记住一句话:看起来简单的事情,实质上往往都是不简单的。
先说说什么叫做大数据:从公认的定义上看,大数据从数据量上看,至少也要达到PB级别(1PB=1024TB=1048576GB)。目前从公开的资料中我们了解到,阿里巴巴集团目前的数据系统之一“云梯”中总存储容量50PB,实际使用容量超过了40PB。百度搜索引擎抓取的数据综合,大概是10-50个PB,这个范围很大,因为这个情况是每隔一小时时间就会发生很大变化。另外其的UGC,也就是用户产生的内容,例如百度贴吧,百度知道,百度文库中的内容,这些内容是广大互联网网民自己产生,自己上传,大家一起分享的数据,这部分数据目前达到1PB。
处理这么多数据,显然,单独的计算机,哪怕是大型机,都很可能是力有不逮的。那么,我们就要借助所谓的云计算技术了。在介绍这部分内容的同时,笔者亦会介绍三个概念:离线计算、实时计算和流数据计算。
离线计算指的是,在用户查询计算产生的数据之前,计算就已经完成了,用户仅仅是查询计算的最终结果。例如细心的你可能会发现,百度指数和淘宝指数中的大部分数据都是每天更新一次的,这个便是因为,这些数据一般都是在每日凌晨时通过离线计算产生的。离线计算由于计算早在用户查询之前就完成了,所以对计算所消耗的时间长度不做要求。目前广泛运用于离线计算的是开源Hadoop系统,在阿里巴巴集团中,其数据系统之一:云梯系统,便是架构在Hadoop上的。这个集群目前拥有超过3200个节点,清一色基于英特尔处理器的x86服务器,日均作业数高达15万。相关数据产品在每天凌晨开始处理超过1.5PB的数据量,会在几个小时内处理完毕,每秒钟处理的数据量都可能是以GB为单位的。同时阿里集团还有另外一套规模略小,但是是基于自主知识产权开发的系统飞天(ODPS)上的数据处理系统,也拥有上千个节点。至于百度公司,根据其2011年公布的情况,其所有的Hadoop集群的节点总和应该超过了1万个,但是节点分布在多个不同的集群中。
离线计算产出的结果数据都是固定的组合的,例如我们可以计算出“王老吉”一词在北京地区由男性在百度上搜索的搜索量。然后数据产品的前端系统查询时直接查询取出这样的数据即可。但是这里有一个问题,如果前端用户需要多维度组合查询的话,例如查询任意性别(男、女)*任意年龄(假设五个年龄段)*任意城市(340多个城市)*任意爱好(假设有10种爱好)的人群的搜索量,那么,如果需要把这些组合全部通过离线计算算出,便有2*5*340*10=34000中组合,那么一个词一天的结果数据便有34000个,这样组合计算的效率和结果的存储成本是不可接受的。所以,我们必须构架一套实时计算系统,暨计算在用户查询时便发生的系统。我们往往也把离线计算系统归类于OLAP(On-Line Analytical Processing, 联机分析系统)中。
有些读者可能用过一些数据库系统,例如sql server、mysql、oracle等,从本质上讲,这些数据库中对数据的计算也是在查询时发生的。但是,在大数据时代,数据量极度膨胀,使得这些传统的数据库很难在短时间内从海量数据中查询计算出用户需要的数据。举个例子,假设淘宝(天猫)每天的成交交易的笔数是1000万笔(实际上显然不止这个数字),那么30天内就有3亿数据量的积累,在这3亿数据条目中,要求在0.5秒内查询出符合三四种条件组合的成交量,并且做分组(group)、汇总(sum)、排序(order)等运算组合的情况下,单机部署的oracle、mysql等的性能都无法满足这个要求。所以便需要更高性能的,在多个节点上并行计算的实时计算系统来支撑了。目前实时计算系统中还没有像Hadoop那样占有极大的市场份额的开源软件,各大公司都在开发自己的实时计算系统,例如阿里巴巴集团的Garuda系统。实时计算系统一般也和业务数据库一起被归类于OLTP(联机事务处理系统)中。
离线计算和实时计算,虽然计算发生的时刻不同,但是数据装载的时刻往往是相同的,都是在每天凌晨装载完毕。而流数据计算系统,则指的是数据源源不断的流到系统中,在数据到达时便计算相关结果的系统。显然流数据系统是可以计算呈现几分钟内新增的数据的。目前这方面的相关应用比较少,可以查到的例子如阿里巴巴集团数据平台的Galaxy提供流数据计算的支持。
以上种种,归结起来,大数据便是海量的(Volume)、多种类的(Variety)、需要大规模的处理才能够凝聚足够价值的(Value)、处理和检索响应速度快的(Velocity)的数据。处理大数据所需要的系统,和传统的数据挖掘工作所需要的系统有根本性区别。同时,大数据时代愈发强调数据的关联性,将各种数据之间关联组合,以产生更大的价值。