大数据分析技术最初起源于互联网行业。网页存档、用户点击、商品信息、用户关系等数据形成了持续增长的海量数据集。这些大数据中蕴藏着大量可以用于增强用户体验、提高服务质量和开发新型应用的知识,而如何高效和准确的发现这些知识就基本决定了各大互联网公司在激烈竞争环境中的位置。首先,以Google为首的技术型互联网公司提出了MapReduce的技术框架,利用廉价的PC服务器集群,大规模并发处理批量事务。
利用文件系统存放非结构化数据,加上完善的备份和容灾策略,这套经济实惠的大数据解决方案与之前昂贵的企业小型机集群+商业数据库方案相比,不仅没有丢失性能,而且还赢在了可扩展性上。之前,我们在设计一个数据中心解决方案的前期,就要考虑到方案实施后的可扩展性。通常的方法是预估今后一段时期内的业务量和数据量,加入多余的计算单元(CPU)和存储,以备不时只需。
这样的方式直接导致了前期一次性投资的巨大,并且即使这样也依然无法保证计算需求和存储超出设计量时的系统性能。而一旦需要扩容,问题就会接踵而来。首先是商业并行数据库通常需要各节点物理同构,也就是具有近似的计算和存储能力。而随着硬件的更新,我们通常加入的新硬件都会强于已有的硬件。这样,旧硬件就成为了系统的瓶颈。为了保证系统性能,我们不得不把旧硬件逐步替换掉,经济成本损失巨大。其次,即使是当前最强的商业并行数据库,其所能管理的数据节点也只是在几十或上百这个数量级,这主要是由于架构上的设计问题,所以其可扩展性必然有限。
而MapReduce+GFS框架,不受上述问题的困扰。需要扩容了,只需增加个机柜,加入适当的计算单元和存储,集群系统会自动分配和调度这些资源,丝毫不影响现有系统的运行。如今,我们用得更多的是Google MapReduce的开源实现,即Hadoop。除了计算模型的发展,与此同时,人们也在关注着数据存储模型。传统的关系型数据库由于其规范的设计、友好的查询语言、高效的数据处理在线事务的能力,长时间地占据了市场的主导地位。
然而,其严格的设计定式、为保证强一致性而放弃性能、可扩展性差等问题在大数据分析中被逐渐暴露。随之而来,NoSQL数据存储模型开始风行。 NoSQL,也有人理解为Not Only SQL,并不是一种特定的数据存储模型,它是一类非关系型数据库的统称。其特点是:没有固定的数据表模式、可以分布式和水平扩展。NoSQL并不是单纯的反对关系型数据库,而是针对其缺点的一种补充和扩展。典型的NoSQL数据存储模型有文档存储、键-值存储、图存储、对象数据库、列存储等。而比较流行的,不得不提到Google提出的Bigtable。
Bigtable是一种用于管理海量结构化数据的分布式存储系统,其数据通常可以跨成千个节点进行分布式存储,总数据量可达PB级(10的15次方字节,106GB)。HBase是其开源实现。如今,在开源社区,围绕Google MapReduce框架,成长出了一批优秀的开源项目。这些项目在技术和实现上相互支持和依托,逐渐形成了一个特有的生态系统。这里借用Cloudera 所描绘的架构图来展现Hadoop生态系统。这个系统为我们实现优质廉价的大数据分析提供了坚实的技术基础。