
1.3.2 基于云平台的分布式处理
介绍云计算之前,首先思考一个小问题,先不考虑会不会写代码,只要有想法即可。
问题:给出一篇文档,让你从中找出出现的单词以及这些单词出现的次数。
想想解题思路是怎样的?
解题思路其实很简单,就是从头到尾读取文档,碰到单词记录下来,同时记录它出现的次数,如果之前出现过,计数就加1。具体可参考如图1-3所示的代码,有学过Java的读者可以参照这个代码实现方法理解其思路。

图1-3
理清了思路,再思考一个问题,如果读取一个100GB的文档,使用原来的算法还能处理吗?还能在合理的时间内给出答案吗?我们知道从硬盘读取文件到内存是通过IO流进行的,而计算的大量时间耗费都在IO上了。由于读取的数据体量很大,所以无论你对WordCount算法本身如何调整和优化,数据处理的效率依然会很低。那么应该如何快速处理呢?
有两种解决方法:一是找一台运算性能非常高的服务器,存储和运算能力都很惊人,但造价同样惊人。SAP公司内存数据库产品HANA,直接将所有数据存储到内存,全部数据存储和运算在内存中进行。但造价非常昂贵。国内有几家公司在使用这样的产品,比如农夫山泉。但并不是所有企业都负担得起。
另一个方法就是把一些廉价的服务器形成集群,每个服务器都需要承担一定运算任务,合作完成。就这个例子而言,可以用100台普通计算机,每台计算1GB的数据,最后统计出来的结果合并在一起就可以了。这个方法既节省成本,而且速度又快,因为服务器之间是并行运算的。这种技术早期叫网格计算,后来叫分布式计算,其实本质上就是如今的云计算。
上面这个思想需要解决两个问题:一是分布式存储,大数据分别存储到不同机器,而对使用者感觉好像是一台机器;二是分布式计算问题,每台机器都需要分配一个任务执行运算,所有任务同时进行,最后还需要对各个节点的运算结果进行合并得到结果。能够解决这两个问题流行的云计算框架就是Apache的Hadoop项目,里面包含好多的子项目和模块。Hadoop官方网站页面如图1-4所示。

图1-4
Hadoop核心就是解决分布式存储的HDFS和解决分布式计算的MapReduce。另外,它还有一些其他模块,也会涉及一些其他领域的技术,结合起来解决云计算问题。这些技术就像自然界的生态系统一样也构成了Hadoop生态圈,如图1-5所示。

图1-5
Hadoop目前使用现状:Hadoop被公认是一套行业大数据标准开源软件,在分布式环境下提供了海量数据的处理能力。几乎所有主流厂商都围绕Hadoop在开发工具、开源软件、商业化工具和技术服务。大型企业,如Oracle、IBM、Microsoft、Intel、Cisco都明显增加了Hadoop方面的投入。
淘宝从2009年开始,用于对海量数据的离线处理,例如对日志的分析、交易记录的分析等。规模从当初的3~400台节点,增加到现在的一个集群有3000个节点。淘宝现在已经有2~3个这样的集群。在支付宝的集群规模也有700台节点,使用HBase对用户的消费记录可以实现毫秒级查询。
随着以博客、社交网络、基于位置的服务LBS为代表的新型信息发布方式的不断涌现,以及云计算、物联网等技术的兴起,数据正以前所未有的速度在不断地增长和累积,大数据时代已经到来。学术界、工业界甚至于政府机构都已经开始密切关注大数据问题,并对其产生浓厚的兴趣。就学术界而言,Nature早在2008年就推出了BigData专刊。计算社区联盟(Computing Community Consortium)在2008年发表了报告“Big Data Computing:Creating revolutionary breakthroughs in commernce,science,and society”,阐述了在数据驱动的研究背景下,解决大数据问题所需的技术以及面临的一些挑战。Science期刊在2011年2月推出专刊Dealing with Data,主要围绕着科学研究中大数据问题展开讨论,说明大数据对于科学研究的重要性。