导航菜单

谷歌大数据技术的研究及开源实现

陈晨1,2 陈达丽2

1(上海交通大学软件学院上海 200240)

2(上海市计算机软件评测重点实验室上海 201112)

摘 要 谷歌公司作为是大数据时代的奠基者,其大数据技术一直是IT企业争相学习和研究的重点,也是行业大数据技术架构的标杆。本文首先叙述了大数据的概念、产生背景及特点。接着,主要阐述了谷歌大数据技术:分布式文件系统(GFS)、Google MapReduce模式、BigTable存储系统。最后,介绍了其开源实现:Hadoop文件系统(HDFS)、Hadoop MapReduce模式、HBase存储系统等,并阐明这些技术的基本原理及组织结构。

教育期刊网 http://www.jyqkw.com
关键词 大数据,革命,谷歌大数据技术,开源doi:10.3969/j.issn.1674-7933.2015.05.004

作者简介:陈晨,男,1987 年生,工程硕士研究生,测试工程师,主要从事及研究领域:软件测试、云计算、大数据,Email :cc@ssc.stn.sh.cn ;陈达丽,工学硕士,工程师,产品测试部部长。

0 引言

1980年3月,阿尔文?托夫勒在其著作《第三次浪潮》中首次提出了“大数据”[1]这一新名词。20世纪末,当科学家们在分析气象、地理、生物、医学等领域时,发现由于涉及的数据量庞大,已经无法再采用已有的计算技术来解决问题了,为了应对这一问题,新的分布式计算技术开始出现。21世纪初,谷歌公司使用分布式文件系统GFS、MapReduce编程模式和分布式存储系统BigTable等新技术手段来解决大数据问题,并发表了相关论文,公开其技术思想。至此,各大企业纷纷仿效,“大数据时代”悄然而至。

1 大数据概述

1.1 大数据的概念

根据维基百科的定义,“大数据是数据集的集合,这种集合巨大、十分复杂,以至于现有的数据库管理工具难以胜任。大数据的挑战体现在捕捉、培育、存储、搜索、分享和可视化海量的数据”[2]。

IDE国际数据公司把大数据的特征归纳成了4V:Volume(海量数据规模)、Velocity(快速数据流转)、Variety(多样化数据类型)、Veracity(巨大数据价值)[3]。

从上述观点来看,多数人会认为,大数据似乎只有和谷歌、雅虎等互联网巨头才有关系。其实,无论是大企业还是中小型企业,只要把日常产生的所有数据信息,如一个文档、一张图片、一段录像等都统一存储起来,且能对企业未来的决策、分析及统计提供帮助的,那么这些数据都可以被称之为“大数据”。大数据可以来源于企业的信息系统、员工的工作终端、大众的消费信息及舆情评论等,这些数据集中起来,其数据量是相当庞大的。

按照数据结构的不同,可以将企业数据分为结构化数据、非结构化数据和半结构化数据。结构化数据,是指存储在关系型数据库、面向对象数据库中等数据库中的数据,即行数据,其字段长度不变,并以二维表结构来逻辑表达实现的数据,比如数字、符号等信息。非结构化数据,是指其字段长度可变,而且每个字段由可重复或不可重复的子字段构成的数据库,并需要经过再次加工才能够得到其价值的数据,比如图片、语音、视频、XML等。半结构化数据,是既包含结构化数据,又包含非结构化数据的数据。比如,手机实时通话所传回的数据,即包括了位置、时间等结构化数据,也包括了声音、视频等非结构化数据。而云计算、分布式文件系统、MapReduce模式等技术则可以针对这些数据进行存储与处理。

1.2 云计算与大数据

说到大数据,人们就会联想到云计算。前文中提到过,大数据是无法采用先前的技术进行处理的,而云计算正是一个新的技术解决方案,其提供的虚拟化技术、海量存储、分布式处理等一系列技术,都是处理大数据所不可或缺的技术。

作个比喻,大数据就如同一片汪洋大海,一眼望去只能看到茫茫一片,其真正价值则蕴藏在深处,而“云计算”就像一艘潜艇,是进入海洋深处的最好工具,可以帮助我们探寻、挖掘、征服大数据的海洋。可见,大数据是需要借助云计算作为技术依托,以实现其真正价值的。

云计算是一种弹性、可扩展的计算范式,在该范式下,云集群可以将IT能力进行整合,并按需提供给客户计算资源,这些资源包括的计算、网络、存储、应用和服务等,而用户则无需关注这些IT资源的搭建、组织与管理[4]。

云计算主要提供的服务模式有三种:①基础设施即服务(IaaS),提供存储、网络、服务器等IT基础资源,该平台提供基础设施,包括物理设备及虚拟化设备,可以部署大数据文件系统;②平台即服务(PaaS),提供了软件的研发平台及相关环境,可部署分布式数据库、分布式处理框架和分布式协作框架等;③软件即服务(SaaS),提供了在线软件服务,可以部署大数据可视化、数据挖掘工具等大数据应用。大数据与云计算的关系如图1所示。

2 谷歌大数据技术

1998年拉里?佩奇和谢尔盖?布卢姆共同创建了谷歌公司,而在短短十多年后便成为全球著名的IT企业。谷歌在全世界部署了200多万台服务器,每天处理着成千上万的存储及搜索业务,其网站也成为全球访问量最大的站点之一,而成就这一切的正是谷歌的大数据技术,也称为谷歌的“三把利刃”[5]:GFS、MapReduce及Bigtable。

2.1 谷歌文件系统(Google File System)

随着信息爆发式的增长,数据量呈现指数倍的增长,简单地通过增加本地计算机的硬盘容量来扩展文件系统的存储容量的方法,在数据大小、数据增长速度、数据备份和数据安全等方面的表现都是不尽人意。因此,人们开始考虑采用分布式的方式对文件进行存储。

分布式文件系统,是指存储文件的媒介不仅可以使用本地计算机,而且还可以依托于通过网络连接的各个不同的计算机节点,从而形成一个庞大的文件存储体系。该存储体系中的各个节点可分布于不同的地理位置,节点之间通过网络进行通信和交互。分布式文件系统对于用户是透明的,用户无需了解数据的具体的存储位置和获取位置,而只需要同使用本地存储一样存储和管理文件。

最著名的分布式文件系统,是谷歌文件系统GFS(Google File System)[6]。GFS在继承传统的分布式文件系统的优点:如性能、可伸缩、可用性等基础上,还针对大数据时代的特征加入了许多新的理念:如把组件失效当作常态;所处理的文件规格通常是GB级;采用文件尾部追加数据等。

在架构方面GFS采用的是主从结构如图2所示,其由一个Master主服务器和多台Chunk块服务器组成,允许由多个客户端同时访问。Master主节点主要管理文件系统中元数据,包括命名空间、访问控制信息、Chunk位置信息、Chunk映射信息等。在GFS存储的文件都被切分成固定大小的Chunk(块),而Master主节点则会在Chunk(块)创建的时候,分配给它们一个64位标示。

Chunk块节点,主要负责把Chunk(块)以Linux文件的形式存储于本地,并按照标示对块数据进行读写操作。

而每个Chunk都会复制到多个不同的Chunk块服务器上,默认每个Chunk都有3个存储复制节点,各个节点相互分散,以确保文件系统的可靠性。此外,Master主节点使用心跳机制:周期性地和各个Chunk块节点进行通讯,接收Chunk的最新状态信息。

2.2 分布式计算与谷歌MapReduce模式

分布式计算,是指把分散在不同地理区域的计算资源,通过互联网连接起来,从而形成一个共享的计算能力网。然后,就能通过该网络,把一个需要巨大计算资源才能解决的问题,分配给众多计算节点进行处理。最后,再把分散的计算数据进行整合,并得到该问题的最终结果。

MapReduce是一个分布式的软件编程架构模式,这种模式可以把对数据集的大规模操作分发到网络中的各个节点进行处理。MapReduce编程模式由分别由Map和Reduce组成,二者的输入/输出数据均以<key, value>键值对作为数据类型与数据处理方式。

键值对是数组的一种变型,数组下标对应为键,而数组内容对应为值,<key, value>键值对中,key对应广义数组的下标,value对应广义数组下标相应的值。采用这种方式则去除了数组名和数组值类型,适用于非结构化及半结构化数据,可以不用受到数据类型的制约。

map()函数的输入数据是一个固定大小为16MB ~64MB的数据片段(splits),这个数据片段会由当前节点格式化为源键值对<keyIn, value>,并依次传送给map()函数,而map()函数则会根据程序定义的规则进行处理,最终生成一系列的中间键值对<key1, value>,<key2, value>,<key3, value>,……

将map任务输出的中间数组整合起来的过程称为shuffle过程,shuffle采用Hash函数,把中间数组按照key值分成Reduce的任务数X,即“hash(key) mod X”,这样就能确保同一范围的key由同一的Reduce进行处理。

reduce()函数的输入数据,是把中间结果进行整合后再进行排序而产生的<key, value>集,然后再调用reduce函数()进行处理,得到目标键值对<keyOut, value>。

在Map阶段对每个元素进行处理,而Reduce阶段则将所有的处理结果进行了规约汇总。如果在Map阶段所需处理的任务量过多,那么可以把一个Map拆分为多个层次的Map后再执行;同样,如果在Reduce阶段的任务量过多,也可以把一个Reduce分解为多个层次的Reduce进行规约。在同一层次的Map或Reduce可以并行操作,并可以分配到不同节点执行,已达到并行和分布的处理效果。

Google的MapReduce计算框架的主要执行流程如图3所示:MapReduce库先将用户程序划分为16MB~64MB的数据片段(splits),然后,用户程序在集群中创建大量程序副本[7]。在副本中有一个Master程序和多个Worker程序,Master分配map任务、reduce任务给空闲的Worker。Map Worker在接收到map任务后,对输入的数据片段进行处理,解析出源键值对<key, value>,并传递给Map程序,Map程序生成中间键值对<key, value>,缓存于内存。内存中的<key, value>对会被分区函数分成N个区域,再写入本地磁盘,其存储位置将传送给Master。Master会将存储位置分配给Reduce Worker,Reduce Worker读取了所有的中间数据后,通过对key进行排序,使具有相同key值的value集中在一起,再传递给用户的Reduce函数,Reduce函数追加到输出文件。

当所有的Map和Reduce任务都完成之后,Master唤醒用户程序,用户程序中的MapReduce调用被返回。

2.3 谷歌分布式存储系统BigTable

分布式存储系统,通过计算机网络把数据分散地存储在网络中的不同节点,每个节点均有自治处理能力,并参与全局应用,各个节点均可扩展。分布式存储系统中的数据信息在物理上分别存储在不同的物理位置,在逻辑上则是一个统一的整体,接受统一的调度及管理。

BigTable是Google著名的分布式存储系统[8],其主要用于处理海量数据,是一种非关系型数据库,是一个分布式的、稀疏地、持久化的多维度排序映射,即一个键值key/value映射,映射的索引是行键、列键以及时间戳。

BigTable通过行键的字典顺序来组织数据,行键可以是任意的字符串,支持最大64KB,同一个行关键字的读、写操作都是原子的,表中的行都是动态分区的,当操作读取行中很少几列的数据时,可通过选择合适的行关键字,有效利用数据的位置相关性,快速寻找到数据了。列是二级索引,每行拥有的列都是可扩展的,列组成的集合叫“列族”,通过列族可以将多个存储着相同类型的列数据列合并为一个小组,列的命名格式是:“列族:限定词”。

Bigtable允许保存同一数据的不同版本,版本区分的依据通过时间戳来索引。Bigtable和用户程序均可以给时间戳赋值,数据的版本以时间戳降序存储。

Bigtable运行在GFS之上,如图4所示,其主要包括三个构件:链接到客户程序的库、一个Mater节点和多个Tablet节点。可以把数据库看成一张大表,而Tablet就是组成大表的小表,是最小的处理单位。Mater节点负责分配Tablet到Tablet服务器,检测更新Tablet状态等。而Tablet节点则负责处理读写数据的相关操作。

3 谷歌大数据技术的开源实现

谷歌将其大数据技术成功应用之后,并未将其秘而不宣,而是从2003年开始陆续发表了相关论文,公开其思想。许多开源组织和公司基于其技术思想,纷纷开发了自己的大数据产品。Apache基金会也参考了Google的技术思想,在此基础上设计了一个可以对大量数据进行分布式处理的软件框架Hadoop,并将其开源。

3.1 Hadoop文件系统

Hadoop框架中的HDFS(Hadoop Distributed FileSystem)[9],是GFS的开源实现。HDFS的架构也采用了主从结构,如图5所示,其由一个NameNode(名称节点)与多个DataNode(数据节点)组成。名称节点主要管理HDFS中的元数据:包括文件列表、文件的数据块列表、数据块的节点列表等。数据节点,负责存储用户数据。DataNode需要周期性地将数据块信息传送给NameNode,使得NameNode主节点保存最新的信息。

HDFS中所有数据都需要保存多个副本,其默认策略为:第一个副本保存在本地;第二个保存在远程机架;第三个保存在第二个副本保存的远程架上。

3.2 Hadoop MapReduce

Hadoop MapReduce模型是Google MapReduce的开源实现[10],其构建在HDFS上,如图6所示主要由客户端、JobTracker作业节点、TaskTracker任务节点组成。用户编写的MapReduce程序通过客户端提交给JobTracker,JobTracker统一调度map任务和reduce任务,分发给TaskTracker进行处理。TaskTracker接收命令执行相应的Map任务和reducer任务,并周期性地通过心跳机制,将节点的运行进度和资源使用情况汇报给JobTracker节点,以便JobTracker节点进行资源管理。

不难看出,上述MapReduce框架中的JobTracker节点,同时兼备了资源管理和作业控制两大功能,这也成为Hadoop的一个最大瓶颈,严重制约了集群扩展性。因此,Hadoop推出了一种新的MapReduce框架——通用资源管理框架Yarn[11],如图7所示,在Yarn中,分开了JobTracker资源管理和作业控制功能,分别由ResourceManager(RM)全局资源管理器和ApplicationMaster(AM)作业控制进程实现。RM负责整个系统资源的管理和分配;而AM仅负责一个作业管理,每个用户提交的应用程序均包含一个AM。此外,Yarn中的NodeManager节点管理器,作为每个节点的资源和任务管理器;Container构件,是一个资源划分的单位,Container中可以运行AM,也可以运行具体的Map任务、Reduce任务及其它任务。

3.3 Hadoop存储系统HBase

HBase是Bigtable的开源实现[12],如图8所示,其主要有客户端、HMaster和HRegionServer组成,客户端可以同时与HMaster和HRegionServe进行通信,分别执行管理类与读写类的操作;HMaster在HBase中存在多个,HBase需保证总有一个HMaster在运行,HMaster主要负责表的管理工作。HRegionServer负责响应用户请求,处理HDFS中读写数据。

4 结束语

美国政府曾宣布“大数据研究和发展倡议”[13],提到“大数据是一个大生意”的理念。该倡议意在增强收集海量数据、挖掘萃取数据的能力,加速美国在科学领域的步伐,并寻求如何通过大数据帮助美国政府解决问题,增加国家安全。其涉及美国国防部、美国国家科学基金等6个联邦政府部门和84个大数据程序项目所组成。可见,大数据的影响已涉及到了国家层面。为迎接大数据时代的到来,我国也已经制定了相应战略,2015年7月4日国务院印发《关于积极推进“互联网+”行动的指导意见》,以互联网应用服务为切入点抢占大数据制高点,从国家战略、人才培养、技术变革、大众创业、万众创新等多方面开启大数据的相关工作,来引领数据时代的潮流。

教育期刊网 http://www.jyqkw.com
参考文献

[1]阿尔文?托夫勒. 第三次浪潮[M]. 黄明坚. 北京:中信出版社, 2006.

[2]邹恒明. 云计算之道[M]. 北京: 清华大学出版社, 2013.

[3]严霄凤, 张德馨. 大数据研究[ J ] . 计算机技术与发展,2013,23(4):168.

[4]刘鹏. 云计算[M]. 北京:电子工业出版社, 2010.

[5]杨巨龙. 大数据技术全解:基础、设计、开发与实践[M].北京:电子工业出版社, 2014.

[6]Sanjay Ghemawat, Howard Gobioff, and Shun-T ak Leung.The Google file system, New York. In 19th Symposium onOperating Systems Principles, 2003: 29-43.

[7]Dean J,Ghemawat S.MapReduce: Simplified Data Processingon Large Clusters[J]. New York. Communications of theACM, 2008, 51(1): 107-113.

[8]Chang, F., Dean, J., Ghemawat, S., Hsieh, W.C, etc.Bigtable: A Distributed Storage Systems for StructuredData, New York, ACM TOCS, 2008:26(2).

[9]陆嘉恒. Hadoop实战(第二版)[M]. 北京:机械工业出版社, 2012.

[10]董西成. Hadoop技术内幕:深入解析MapReduce架构设计与实现原理[M]. 北京:机械工业出版社, 2013.

[11]董西成.Hadoop技术内幕:深入解析YARN架构设计与实现原理[M]. 北京:机械工业出版社, 2014.

[12]马延辉, 孟鑫, 李立松. 大数据技术丛书:HBase企业应用开发实战[M]. 北京:机械工业出版社, 2014.

[13]赵刚. 大数据:技术与应用实践指南[M]. 北京:电子工业出版社, 2013.

下载文本