大数据的应用

今天我们来聊一下,如果你/某企业已经有了大数据的硬件平台,那么到底能用它来做什么呢?

http://people.ischool.berkeley.edu/~hal/Papers/2013/BeyondBigDataPaperFINAL.pdf 这篇来自Google首席经济学家的论文对这个问题有简洁明了的阐述:

  1. 数据的抽取和分析
  2. 私人化/客户化定制
  3. 连续不断的实验
  4. 基于更好的监测而提供新型的服务套餐/合约

直接翻译过来有点拗口,不过具体的例子就很好理解了。今天先说数据的抽取和分析,几乎每个谈到大数据的人都会谈到这一点,这是其最直接而普遍的应用。

比如你提供了一个网络服务,你很想知道这个服务的运行和使用情况,那么怎么办呢?很简单,记Log(日志)就是了:”几点几分,谁,来自哪个IP,访问了哪个服务,成功还是失败”。早些年Log一办就用来监测系统运行是不是正常,通常系统管理员写一些Perl脚步扫描一下就完事儿了。也有人干脆把Log写进数据库,这样用SQL语句就可以查询,非常方便。 题外话:突然想起来之前碰到的一个项目,Log全部记到数据库,后来每天海量的SQL语句插入,查询,终于扛不住了。

后来出现了Hadoop这种的分布式系统,之前做不到的事情可以做了: 公司的老板想知道产品的使用状况;产品经理想知道某个新功能是否受欢迎;市场营销人员想知道到底谁才是目标客户;系统维护人员想知道服务器负载。

这种系统一般的结构如下:

  • 首先把Log集中到HDFS文件系统,然后用Hadoop Cluster访问HDFS。
  • 具体的查询语句由用户向Hadoop Cluster提供:用户既可以写MapReduce Job来告诉Hadoop Cluster要怎么处理日志,也可以直接写Hive script. Hive是一种语法很SQL非常像的语言,它首先赋予Log以结构化的定义,然后像SQL语句一样做查询。
  • Hadoop运算的结果通常会存储到数据库里。因为运算结果已经是处理过的数据,数据量不大,存储到数据库方便之后快速查询,并且可以和很多现有的基于数据库的应用结合。
  • 最后无论是老板的,产品经理的,市场营销人员的,还是系统维护人员的问题,都可以通过从数据库生成的报表来回答。最简单的比如用Excel连接到数据库就可以做报表,复杂的当然有各种各样的报表产品。

在云计算平台逐渐发达的今天,很快就可以搞出这样的系统。即使不用云计算平台,照着文档搭个Hadoop出来,然后部署这样的系统也并非难事。大数据从此不再是什么神秘的,只有少数几家大公司才玩儿的了的事情。

可是如果大数据之做到这个程度,那就太初级了。很多地方在聊大数据,最后无非是在海量数据上计算一个平均值AVG,最大值最小值MAX,MIN;或者按某些东西分分类GroupBy;再或者把两组数据关联一下Join。这几个函数可是初中生就会的。。。所以在大数据很热的今天,机器学习人工智能也很热。一直没有勇气去深入研究一下机器学习人工智能的理论,所有的知识还停留在读书时候读的一点材料。不过我相信只有在大数据集上运用统计学的方法才能得到更多有意思的结果。

现在已经有越来越多的大公司小公司正在把机器学习人工智能的算法搬到cloud上来,我觉得这是个不错的方向。如今这些算法的门槛太高了, 一般的程序员都不太清楚,更谈不上应用了。整个IT产业的历史都是不断把各种技术封装抽象到不同的层次模块,希望机器学习人工智能的最新成果快点被模块化。

 

大数据,要怎么玩

大数据,云计算和商务智能是时下很流行的几个词。那么一个企业想要做大数据分析,要怎么玩,有要花多少钱呢?

做大数据分析首先要有一套Hadoop集群来处理数据。我们假设某企业每天有100GB的数据需要存储并做分析,其所用的Hadoop集群有4个结点 – 这算是最起码的配置,如果数据太少了根本没必要玩儿大数据。部署一套Hadoop集群有多种解决方案:

  1. 自己买机器,然后去http://hadoop.apache.org/ 安装各个组件自己搭建
  2. 自己买机器,然后安装某些定制过的Hadoop集群。比如http://www.cloudera.com/http://hortonworks.com/ 都是在Apache开源软件的基础上做的集成和扩展。这样部署起来更方便,有问题了也可以找相关的公司咨询解决方案(它们也是这么赚钱的)
  3. 使用Amazon的EMR, http://aws.amazon.com/elasticmapreduce/ ,在amazon的云计算平台上创建一个Hadoop集群。
  4. 使用Microsoft的HDInsight, http://azure.microsoft.com/en-us/services/hdinsight/,在Microsoft的云计算平台上创建。

从技术和可维护性的角度来说,我是坚决赞成使用云计算平台的解决方案的。随便想想前两个方案吧,先要买机器: 买什么配置的机器得自己研究,买多少台呢?多了浪费,少了又怕不够用。买回来得有地方放着吧,要机房要稳定供电要提防着机器罢工。然后还得转软件,得专门雇个懂Hadoop的人,其实也没什么大事儿,就是配置一下系统维护一下,可是又不能找临时工,不然哪天系统出问题了找谁去修呢?

我们可以算一下方案3,4的花费有多少:

Amazon EMR按节点收钱,以General Purpose – Current Generation m3.xlarge为例,每小时的价格是$0.35 (虚拟机的价格加上EMR的价格之和 )。 那么2个控制结点(master node)以及4个核心结点(core node)每月的费用大约是0.35 x 6 x 24 x 30 = $1512. 存储另外收钱,每天100G那么每个月3000G的数据,费用大约是0.0295*3000=$88.5。 除此之外数据的读写传输还有额外费用,暂且不计。每个月费用大约在$1600左右,如果数据一直保留那么后来的存储费用会越来越高。

Microsoft HDInsight收费的方法类似,以2个头结点(head node)和4个数据结点(data node)为例,每个结点$0.32每小时,每月大约$1382。数据存储$0.024*3000=$72,合计大约$1450左右。我比较了一下,Microsoft的A3机器比amazon的m3.xlarge内存要小(7G VS 15G)。 所以这样看来的,两家运营商提供的Hadoop集群价格不相上下。

所以使用云计算平台的Hadoop,每个月花费至少在$1500到上下。不用想了,一定比自己搭系统便宜,雇个人维护系统每个月工资也得$1000了吧,还有机房的房租,电费,硬件维护升级的费用。。。

等等。。。刚才我们假设是4个结点,如果真的做点用来做一些应用的话,4个结点就太少了,那么增加到十几二十个结点的话呢?每个月就要$7500了。对于中小型企业来说也算一笔不菲的花销,对大企业还好。所以虽然云计算平台有优势,虽然目前Amazon和Microsoft都推出了Hadoop,但是用户数量并不是非常多,价格门槛比较高也算是一个重要因素:随便用用就要成千上万的花钱,谁敢随便用啊。

 

那么这个价格是否还可以更低呢?答案是可以。 看下现在Hadoop的用法,每个客户都要创建自己的Hadoop集群,系统运行起来就开始收费。显而易见这种做法并没有利用到云计算的优势:在多个用户之间共享资源,以提高资源利用率并降低价格。每个客户的Hadoop集群都不可能一直在使用,总有忙时闲时,闲的时候就是在浪费。

实际上amazon提供了另外一些类型的虚拟机:Reserved Instance针对低,中,高的利用率提供了三种不同价格,如果你认为自己的Hadoop集群利用率比较低,可以选Light Reserved Instance,每小时价格会便宜。还有一种Spot Instance,其价格根据竞价机制决定:amazon会根据系统的当前负载情况来定价,然后客户出价来bid,bid到之后可以使用直到用户选择停止或者amazon的价格增长。

Microsoft方面就做的比较差,没有这些灵活的选项,以至于客户不得不频繁的创建然后删除Hadoop集群,因为不删除放在那里就要收钱。

其实amazon提供的方案对客户来说也非最佳选择。如果客户自己并不清楚自己的利用率怎么办,或者利用率经常变化难以预测怎么办?最直接的方法是按需收钱:试想一下,作为客户,我只是想去分析一些数据,我凭什么要在乎创建什么样的Hadoop集群,要多少结点,多大负载,平台完全可以帮客户决定这些事情,帮客户把运算需求动态的分布在若干结点上,算完以后用了多少CPU收多少钱,多么简单。

期待云平台上的Hadoop集群能继续改进,真正利用到云的优势。