1 引言
1.1 研究背景
动辄达到数百TB规模的数据量早已超出了传统的关系型数据库的存储与分析能力。单机的统计和可视化的工具也因此变得无法使用,它们的缺点主要表现在以下方面:灵活性差、扩展性差、性能差等等。在此背景下,出现了一些摒弃了传统DBMS设计思想的新存储系统---NoSQL,即“Not only SQL",也就是对关系型DBMS的补充。相比较于关系型数据库来讲,NoSQL具有大得多的吞吐量、拥有更强大的水平和垂直扩展能力,更重要的是,它使用的是低端硬件集群,这样就更好地避免了昂贵的OR-Mapping。Redis、MongoDB和HBase等就是在NoSQL思想下开发出的很受市场欢迎的数据库系统。
大数据之所以这么吸引众人的眼球,并不仅仅在于它的海量数据存储,更在于它能够从海量数据中得到有价值的信息。这说的就是大数据的第二个重要意义:对海量的数据信息进行信息处理和挖掘。其重要价值已被越来越多的公司所发现并加以利用。例如,很多社交网站,就是通过数据挖掘来找到潜在的用户需求,从而能够对用户的个人喜好进行分析处理,设计出新颖的网络应用模块,比如好友之间的广告推荐等应用模块;Google更是通过对海量数据进行page-rank信息的计算,对网页进行高效准确的排名。微软公司提出的Windows Azure Platform,用户可以通过客户端对云端资源访问、处理和分析。
在大数据风靡全球的同时,我国政府也加快了对大数据相关技术的攻关,工信部发布的《物联网十二五规划》里,把信息处理技术作为4项关键技术创新工程之一被提出来,其中包括了海量数据存储、数据挖掘、图像视频智能分析等大数据技术的重要组成部分。随着技术的日益成熟,市场逐步向前推进,受高科技的快速发展、互联网速度的进一步提高,海量数据的高效处理必然将对IT产业带来更大的推动作用。
1.2 研究现状
因为Web2.0技术在网络中的普遍应用,NoSQL得到了非常快速的发展。尽管在实际的应用系统中,已经存在了大量的NoSQL数据存储系统,但是,就其研究现状来说,许多挑战性问题还值得研究。例如:NoSQL并不具备类似关系型数据库所具有的强有力的理论;而且其并没有能考虑全局通用性的系列化的成果,并因此导致了其应用具有一定的局限性。
近年来,大数据如浪潮般席卷全球,并深度改变人们的生活、工作和思维方式。世界上越来越多的国家开始从战略层面认识大数据,在政府治理领域融入大数据可视化思维和技术。目前,大数据可视化分析产品也伴随着大数据的爆发而日渐兴起。国外的此类产品已慢慢走向成熟,例如Hadoop、IBM大数据平台和Splunk等。
其中,MapReduce作为一种海量数据处理的并行编程模型,自提出以来,受到了工业界和学术界的广泛关注。目前已经广泛应用在网页索引、数据挖掘等方面。
Hadoop作为实现了Map-Reduce模型的开源分布式并行编程框架,已经在一些领域取得了显著的成效。 Hadoop主要提供了一套名为HDFS的分布式文件系统以及支持MapReduce的计算框架。此外,还提供构建在HDFS和MapReduce之上的可扩展的数据仓库Hive,结构化数据库HBase,数据流高层语言Pig,高性能分布式协同服务ZooKeeper,以及 面向大规模分布式系统的数据收集软件Chukwa等。基于Hadoop的应用已经遍地开花,尤其是在互联网领域。Yahoo!通过集群运行Hadoop,以支持web搜索的研究;Facebook借助集群运行Hadoop,以支持其数据分析和机器学习;百度则使用Hadoop进行搜索日志的分析和网页数据的挖掘工作;淘宝的Hadoop系统用于存储并处理电子商务交易的相关数据;中国移动研究院基于Hadoop的BigCloud系统用于对数据进行分析和并对外提供服务。国内的高校和科研院所基于Hadoop在数据存储、资源管理、作业调度、 性能优化、系统高可用性和安全性方面进行研究,并将研究成果多以开源形式贡献给Hadoop社区。
Facebook使用Hive作为底层数据仓库,原始手机的全站数据都要经过Hive来进行加工和分析,然后把处理过的数据返回给前台或者关系型数据中。Hive是以Hadoop作为基础的,并把开发人员所需要的SQL接口暴露出来。所以大大降低了开发成本,程序员只需要写出SQL语句就可以自动转换为MapReduce程序。另外,MapReduce作为大数据处理的并行处理架构,还是有很多问题急需解决。例如:数据查询中,连接操作不能很高效的转换为MapReduce程序。
从上面的论述来看,大数据的时代,谁能占领这块新领地,谁就能够在这一场技术之争中获胜,并成为未来计算机领域的新龙头。
1.3 研究内容
本文的主要研究基于MapReduce框架的数据查询,主要的研究内容如下几个方面:
第一,如何基于大规模数据建立NoSQL的数据模型,大规模的原始数据的存储方式以及存储结构的建立与传统的SQL数据模型的不同及优点在什么地方。
第二,大规模数据存储之后,如何实现大规模的数据查询是本文研究的第二个重要内容。在此基础之上,介绍MapReduce是如何实现大规模数据查询的高效性,并了解Hive的SQL语言的易用性。
第三,对于查询扩展算法,在各种数据文件大小不同的情况下,如何选择高效的查询算法;以及在数据倾斜的状况下,如何规避reduce阶段的时间浪费。
第四,在实验环境中,就以上提出的各种算法,写出相应的实现代码,并记录各种算法的查询时间,以验证算法决策树的正确性。
1.4 论文结构
本文章节安排如下:
第一章 引言。介绍了大数据时代的背景,基于NoSQL的大数据研究现状,以及数据挖掘的并行处理框架MapReduce的介绍,最后介绍了论文的组织结构和内容安排。
第二章 Hadoop平台。介绍论文涉及的主要技术,主要介绍Hadoop平台的架构和工作原理。
第三章 查询算法思想。讲解连接的种类,查询的算法设计原则和针对各种查询算法而提出的算法决策树。
第四章 数据均匀情况下的查询算法。本章详细讲述在数据均匀情况下的重分区连接、复制连接和半连接的两表等值连接算法,以及多连接的算法。
第五章 数据倾斜情况下的查询算法。本章详细讲述了在数据倾斜的情况下的连接算法。
第六章 总结与展望。总结全文内容并展望未来。
2 Hadoop平台
2.1 Hadoop平台概述
Hadoop是一个开源的分布式计算平台。文献[2]详细讲述了Hadoop平台的架构和原理。Hadoop为用户提供了系统底层的细节透明的分布式基础架构。它的设计并不是依靠硬件技术来提高可用性,而是扩展大量的廉价机器来提供本地存储和计算,又依赖能够自动检测错误的软件库来提高正确率。Hadoop是基于Google MapReduce算法写的Java实现,有很强的移植性。它能够让Hadoop程序员不用考虑细节,直接根据其提供的接口来编写上层数据挖掘代码。
Hadoop是目前最流行的分布式开发框架。不仅有很好的扩容能力,并且能够自动检测失效的DataNode,并且将其失败的任务重新分配。Hadoop不仅能够保持非常快的处理速度,而且所花费的硬件资源都是廉价机器。这给了大数据处理“亲民”的形象。
作为流行的趋势,Hadoop的快速发展是有目共睹的。它的相关子项目也受到开发者的喜爱和青睐。如图2-1所示,Hadoop架构已越发完善,其相关子模块已经很多,如:可扩展的分布式数据库HBase、数据仓库Hive、计算引擎Spark、以及Zookeeper、Mahout等。
图2-1 Hadoop架构
2.2 HDFS
2.2.1 HDFS概述
HDFS是Hadoop的分布式文件系统,基于流数据访问和处理超大文件而设计开发的,能够运行在通用硬件之上。大体来讲,HDFS有以下几个优点:
(1)HDFS的错误检测和快速恢复使其独领风骚。因为,在实际生产环境中,硬件错误是常态,而不是说发生了异常情况,特别是当成千上百个服务器工作时,一个组件的失灵是不可避免的。
(2)HDFS上部署的应用程序主要是以流式读为主,大多是做批量处理;所以HDFS具有数据访问的高吞吐量来支持应用程序的执行。
(3)HDFS的存储能力已经达到了PB级的数据,并且有很强的集群扩展能力。
(4)由于HDFS自身所具有的容错率,使其只需运行在廉价的商用机器集群之上就可以。
2.2.2 HDFS架构
如图2-2所示,HDFS是依赖主从结构来管理文件系统的。它包含一个NameNode和多个DataNode。很显然,主节点是NameNode,管理整个文件系统的命名空间。集群中的DataNode负