大数据从“小”做起——中小企业Big Data解决之道
本文是最新的拙作,希望能大家能提点意见^_^
任何一个时代或者模式的兴起,都离不开与之相关的Killer App,比如,C/S时代的SAP ERP,互联网 1.0 时代的门户,以及互联网 2.0时代的搜索和SNS等,那么在当今云计算这个时代有那些Killer App呢?当然首当其冲的肯定是以VMware 和Amazon EC2为代表的虚拟化和相关IaaS服务,除此之外,新近崛起的大数据绝对也是云计算的Killer App之一,并且不仅类似百度、阿里以及腾讯这样的互联网巨头有相关的应用需求,而且根据我个人平时与客户接触,发现有很多普通中小企业,特别是中型的互联网和物联网企业,在这方面的场景也有很多。本文将首先给大家介绍一下在我眼中的大数据,以及大数据的意义和特点,再给大家聊聊大数据的常见处理流程,之后将会和大家分享一下我是如何帮助一些中小企业实施大数据相关的解决方案,也就是大数据如何从“小”做起。
什么是大数据?
过去计算机产生的数据,较简单,基本上都是一笔笔事务,总量虽大,但是都是整体增长幅度都还是可控的,比如传统的金融企业,经常使用几台大型机就管理其所有的业务数据,而最近几年,由于以平板、智能手机和传感器为代表的智能设备越来越多,同时这些设备的生成的数据更是远远地超过我们的想象。据美国著名咨询公司IDC的统计,全球数字信息在未来几年将呈现惊人增长,预计到2020年总量将是现在的44倍。据另外一份数据显示,全球 90% 的数据都是在过去两年中生成的,并且每年以50%的速度进行增长,每天,遍布世界各个角落的传感器、移动设备、在线交易和社交网络产生上PB级别的数据;每个月,全球网友发布了 10多 亿条 Twitter 信息和300多 亿条 Facebook 信息。那么这些大数据的存在有什么价值和意义呢?
大数据的意义
我个人和一些朋友一直觉得大数据就好比一口油井,因为里面蕴含着非常丰富的价值,如果企业能有效利用其内部存储的海量数据,那么将会改善其自身的产品和服务,从而提升客户和受众的体验,从而在大数据时代获取竞争优势,并且随着本身分析和挖掘技术不断地提升,可以在之前的基础上提供新的决策模式,从而支持管理者进行快速和精确地决策,这样能够超越对手,抢占市场先机,独领风骚。
下面通过几个行业来和大家举例讲解一下大数据有那些意义和作用?
互联网企业
我们有一些客户,他们主要是做网络舆情或者网络广告,他们明天都会处理和收集TB级别日志或者网页,结构化和非结构化都有,他们就是通过分析这些数据来给其客户提供价值,比如分析一下一个男性护肤品广告是在世界杯期间投放好,还是在亚洲杯那段时间播出好?还有,在电子商务方面,国外eBay的分析平台每天处理的数据量高达100PB,超过了纳斯达克交易所每天的数据处理量。为了准确分析用户的购物行为,eBay定义了超过500种类型的数据,对顾客的行为进行跟踪分析,并且通过这些分析促进eBay自身的业务创新和利润增长。
智能电网
我们有一个合作伙伴,他们是做智能电网相关的解决方案。对那些电网而言,如果无法准确预估实际电力的使用情况,将会使电网要求电厂发出过量的电力,虽然这些过量电力可以通过某种模式进行保存,但是大量的电力浪费已不可避免。而通过他们智能电网的解决方案,每隔一刻钟会采集一个省几千万用户的用电数据,之后他们会根据这些数据来精确分析用户的用电模型,最后通过这个用电模型来优化电力生产,从而有效地减少电力资源的浪费。
车联网
在车联网方面,我们也有一个客户,他们在一个城市有几十万台基于Android的终端,而这些终端会每隔一段时间会发送具体位置的GPS消息给后端的数据集群,接着这些集群会分析一下这些海量的GPS信息,分析出那些路段在什么时候比较堵,之后将这些非常有价值的信息不断地推送给客户,从而帮助用户减少在路上所消耗的时间。
医疗行业
在这个方面,大数据的用例有很多。首先,通过分析大量的病例信息,将有效地帮助医生治病;其次,假设在一个病人身体的多个节点加入探针设备,而且每个探针每天会采集GB级别关于人体细胞和血液运行状态的数据,之后计算集群可以根据这些数据来来进行分析,这样能更精确地判断病因,从而让医生对病人进行更具针对性地治疗。
机器学习
在这方面,最出名的例子莫过于最近很火的Siri,它后台有一个庞大的HBase集群来对类似语言这样的文本数据进行分析和管理,从而使Siri变成一位越来越老练的个人助手,为iPhone 4S的用户提供了日期提醒、天气预报和饭店建议等服务。除此之外,还有IBM的Watson,它通过一个基于Hadoop UIMA框架的集群来挖掘海量的文本信息来实现一定程度的人工智能,并在美国著名知识问答节目Jeopardy中战胜多位出色的人类选手。
国家安全
这方面最出名的例子,莫过于美国的联邦情报局(CIA)。在过去10年中,他们通过无人侦察机收集了大量阿富汗那边地理相关的视频资料,之后通过分析这些海量视频资料,来对极具危害性的恐怖组织团伙进行定位。
大数据的特点
大数据,不仅有“大”这个特点,除此之外,它还有很多其他特色,在这方面,业界各个厂商都有自己独特的见解,但是总体而言,我觉得可以用“4V+1C”来概括,“4V+1C分别代表了Variety(多样化)、Volume(海量)、Velocity(快速)、Vitality(灵活)以及Complexity(复杂)这五个单词。
Variety (多样化)
大数据一般包括以事务为代表的结构化数据、以网页为代表的半结构化数据和以视频和语音信息为代表的非结构化等多类数据,并且它们处理和分析方式区别很大。
Volume (海量)
通过各种智能设备产生了大量的数据,PB级别可谓是常态,我接触的一些客户每天量都在几十GB,几百GB左右,我估计国内大型互联网企业的每天数据量已经接近TB级别。
Velocity (快速)
要求快速处理,因为有些数据存在时效性,比如电商的数据,假如今天数据的分析结果要等到明天才能得到,那么将会使电商很难做类似补货这样的决策,从而导致这些数据失去了分析的意义。
Vitality (灵活)
因为在互联网时代,和以往相比,企业的业务需求更新的频率加快了很多,那么相关大数据的分析和处理模型必须快速地适应。
Complexity (复杂)
虽然传统的BI已经很复杂了,但是由于前面4个V的存在,使得针对大数据的处理和分析更艰巨,并且过去那套基于关系型数据库的BI开始有点不合时宜了,同时也需要根据不同的业务场景,采取不同处理方式和工具。
大数据的常见处理流程
前面已经跟大家讲了处理大数据的必要性和特点,那么接着将谈到如何处理大数据,特别是常见的流程。具体的大数据处理方法其实有很多,但是根据长时间的实践,我总结了一个基本的大数据处理流程(图1),并且这个流程应该能够对大家理顺大数据的处理有所帮助。
图1. 大数据的常见处理流程
整个处理流程可以概括为四步,分别是采集、导入和预处理、统计和分析以及挖掘
采集
利用多个的数据库来接收发自客户端(Web、App或者传感器形式等)的数据,并且用户可以通过这些数据库来进行简单的查询和处理工作,比如,电商会使用传统的关系型数据库MySQL和Oracle等来存储每一笔事务数据,除此之外,Redis和MongoDB这样的NoSQL数据库也常用于数据的采集。
在采集部分,主要特点和挑战方面是并发数高,因为同时有可能会有成千上万的用户来进行访问和操作,比如著名用于购买火车票的12306站点和淘宝,它们并发的访问量在峰值时达到上百万,所以需要在采集端部署大量数据库才能支撑,并且如何在这些数据库之间进行负载均衡和分片的确是需要深入地思考和设计。
导入 / 预处理
虽然有采集端本身会有很多数据库,但是如果要对这些海量数据进行有效地分析,还是应该将这些来自前端的数据导入到一个集中的大型分布式数据库或者分布式存储集群,并且可以在导入基础上做一些简单的清洗和预处理工作,也有一些用户会在导入时候使用来自Twitter的Storm来对数据进行流式计算,来满足部分业务的实时计算需求。
在特点和挑战方面,主要是导入数据量大,每秒导入量经常达到百兆,甚至GB级别。
统计 / 分析
统计与分析主要利用分布式数据库或者分布式计算集群来对存储于其内的海量数据进行普通的分析和分类汇总等,以满足大多数常见的分析需求,在这方面,一些实时性需求会用到EMC 的GreenPlum、Oracle的Exadata以及基于MySQL的列式存储Infobright等,而一些批处理或者基于半结构化的需求可以使用Hadoop。
统计与分析这部分,主要特点和挑战方面是分析涉及的数据量大,其对系统资源,特别是I/O会有极大地占用。
挖掘
与前面统计和分析不同的是,数据挖掘一般没有什么预先设定好的主题,主要是在现有数据上面进行基于各种算法的计算,从而起到预测(Predict)的效果,这样实现一些高级别数据分析的需求,比较典型算法有用于聚类的K-Means、用于统计学习的SVM和用于分类的Naive Bayes,主要使用的工具有Hadoop的Mahout等。
在特点和挑战方面,主要是挖掘的算法复杂,并且计算涉及的数据量和计算量都很大,还有,常用数据挖掘算法库以单线程为主。
如何从“小”做起?
由于我平时与中小企业的接触非常频繁,虽然技术方案与实际的问题相关,很难在一篇文章当中详尽地道来。除了上面那个基本处理流程之外,我下面会将一些基本的从“小”做起的思路给大家阐述一下:
- 认识自己的不足,主要是在技术、人力和财力等方面是不仅无法与Google和Amazon这样国外巨头比肩,而且与国内三大互联网BAT(百度、阿里巴巴和腾讯)也是无法比肩的,所以需要深刻认识;
- 明确分析自己的需求,下面是几个常见的需求选项:
- 数据类型,是结构化,半结构化,还是非结构化为主;
- 数据大小,内部数据级别是TB级别、PB级别或者PB以上级别;
- 读写量级,比如每小时写入的数据达到GB级别,或者每天写入达到TB级别等;
- 读写比例,是写为主,还是以读为主;
- 并发数,大致的每秒并发数;
- 一致性,只接受强一致性,或者可以接受最终一致性和弱一致性;
- 延迟度,最高能容忍的延迟度是多少,是10毫秒,100毫秒,还是可以1秒
- 分析的复杂度,需不需要引入较复杂的数据挖掘算法等。
- 要灵活使用现有的工具,首先,推荐使用一些开源或者是可以承受的商业软件,虽然个人并不排斥自建,但是一定要有具体的商业价值,并且最好是在现有工具上的画龙点睛,而不是从头开始构建;其次,工具方面应与具体的场景相关,在不同的场景要使用不同的工具。
- 尽量不要走平台思路,应以具体的应用和场景为主,因为建一个平台有很多附加的成本和设计,比如,Amazon的云平台是通过至少五年时间构建而成。特别是项目的初期,不建议走平台这个方向,而是应脚踏实地以具体的商业场景为主。
- 找准切入点,最好是找到一个技术难度小,并且有一定的商业价值的场景来做大数据技术落地的试点,并不断地进行测试和迭代来验证,而不是一味求复杂,求大,这样比较容易说服企业管理层来进行长期地投入和支持;
最后,想和大家说一下,“罗马不是一天建成的”,无论是Google的用于大数据处理的基础设施,还是我们国内淘宝的“云梯”都是一步步通过不断积累和实践而成,所以我们这些中小企业应该贯彻“大处着眼、小处着手”的方针来持续地验证和推进。还有,我们人云科技将于今年上半年发布用于海量结构化数据处理的YunTable,由于其性能指标非常出色,并且已经有正式运行的大型集群,所以请各位朋友敬请期待。