2.1 概述
本节简要介绍Hadoop的起源、发展历史、特性、应用现状和版本演变。
2.1.1 Hadoop简介
Hadoop是Apache软件基金会旗下的一个开源分布式计算平台,为用户提供了系统底层细节透明的分布式基础架构。Hadoop 是基于 Java语言开发的,具有很好的跨平台特性,并且可以部署在廉价的计算机集群中。Hadoop的核心是分布式文件系统(Hadoop Distributed File System,HDFS)和MapReduce。HDFS是针对谷歌文件系统(Google File System,GFS)的开源实现,是面向普通硬件环境的分布式文件系统,具有较高的读写速度、很好的容错性和可伸缩性,支持大规模数据的分布式存储,其冗余数据存储的方式很好地保证了数据的安全性。MapReduce是针对谷歌 MapReduce 的开源实现,允许用户在不了解分布式系统底层细节的情况下开发并行应用程序,采用MapReduce来整合分布式文件系统上的数据,可保证分析和处理数据的高效性。借助于Hadoop,程序员可以轻松地编写分布式并行程序,将其运行于廉价计算机集群上,完成海量数据的存储与计算。
Hadoop被公认为行业大数据标准开源软件,在分布式环境下提供了海量数据的处理能力。几乎所有主流厂商都围绕 Hadoop 提供开发工具、开源软件、商业化工具和技术服务,如谷歌、雅虎、微软、思科、淘宝等都支持Hadoop。
2.1.2 Hadoop的发展简史
Hadoop这个名称朗朗上口,至于为什么要取这样一个名字,其实并没有深奥的道理,只是追求名称简短、容易发音和记忆而已。很显然,小孩子是这方面的高手,大名鼎鼎的“Google”就是由小孩子给取名的,Hadoop同样如此,它是小孩子给“一头吃饱了的棕黄色大象”取的名字(见图2-1)。Hadoop后来的很多子项目和模块的命名方式都沿用了这种风格,如Pig和Hive等。
图2-1 Hadoop的标志
Hadoop最初是由Apache Lucene项目的创始人Doug Cutting开发的文本搜索库。Hadoop源自2002年的Apache Nutch项目——一个开源的网络搜索引擎并且也是Lucene项目的一部分。在2002年的时候,Nutch项目遇到了棘手的难题,该搜索引擎框架无法扩展到拥有数十亿网页的网络。而就在一年以后的2003 年,谷歌公司发布了分布式文件系统 GFS 方面的论文,可以解决大规模数据存储的问题。于是,在2004年,Nutch项目也模仿GFS开发了自己的分布式文件系统(Nutch Distributed File System,NDFS),也就是HDFS的前身。
2004 年,谷歌公司又发表了另一篇具有深远影响的论文,阐述了 MapReduce 分布式编程思想。2005年,Nutch开源实现了谷歌的MapReduce。到了2006年2月,Nutch中的NDFS和MapReduce开始独立出来,成为Lucene项目的一个子项目,称为Hadoop,同时Doug Cutting加盟雅虎。2008年1月,Hadoop正式成为Apache顶级项目,Hadoop也逐渐开始被雅虎之外的其他公司使用。2008年4月,Hadoop打破世界纪录,成为最快排序1 TB数据的系统,它采用一个由910个节点构成的集群进行运算,排序时间只用了209s。在2009年5月,Hadoop更是把1 TB数据排序时间缩短到62 s。Hadoop从此声名大噪,迅速发展成为大数据时代最具影响力的开源分布式开发平台,并成为事实上的大数据处理标准。
2.1.3 Hadoop的特性
Hadoop是一个能够对大量数据进行分布式处理的软件框架,并且是以一种可靠、高效、可伸缩的方式进行处理的,它具有以下几个方面的特性。
● 高可靠性。采用冗余数据存储方式,即使一个副本发生故障,其他副本也可以保证正常对外提供服务。
● 高效性。作为并行分布式计算平台,Hadoop采用分布式存储和分布式处理两大核心技术,能够高效地处理PB级数据。
● 高可扩展性。Hadoop 的设计目标是可以高效稳定地运行在廉价的计算机集群上,可以扩展到数以千计的计算机节点上。
● 高容错性。采用冗余数据存储方式,自动保存数据的多个副本,并且能够自动将失败的任务进行重新分配。
● 成本低。Hadoop 采用廉价的计算机集群,成本比较低,普通用户也很容易用自己的 PC搭建Hadoop运行环境。
● 运行在Linux平台上。Hadoop是基于Java语言开发的,可以较好地运行在Linux平台上。
● 支持多种编程语言。Hadoop上的应用程序也可以使用其他语言编写,如C++。
2.1.4 Hadoop的应用现状
Hadoop凭借其突出的优势,已经在各个领域得到了广泛的应用,而互联网领域是其应用的主阵地。
2007年,雅虎在Sunnyvale总部建立了M45——一个包含了4 000个处理器和1.5 PB容量的Hadoop集群系统。此后,包括卡耐基梅隆大学、加州大学伯克利分校、康奈尔大学和马萨诸塞大学阿默斯特分校、斯坦福大学、华盛顿大学、密歇根大学、普渡大学等12所大学加入该集群系统的研究,推动了开放平台下的开放源码发布。目前,雅虎拥有全球最大的 Hadoop 集群,有大约25 000个节点,主要用于支持广告系统与网页搜索。
Facebook作为全球知名的社交网站,拥有超过3亿的活跃用户,其中,约有3 000万用户至少每天更新一次自己的状态;用户每月总共上传 10 亿余张照片、1 000 万个视频,每周共享 10亿条内容,包括日志、链接、新闻、微博等。因此,Facebook需要存储和处理的数据量同样是非常巨大的,每天新增加4 TB压缩后的数据,扫描135 TB大小的数据,在集群上执行Hive任务超过7 500次,每小时需要进行8万次计算。很显然,对于Facebook而言,Hadoop是非常理想的选择,Facebook主要将Hadoop平台用于日志处理、推荐系统和数据仓库等方面。
国内采用Hadoop的公司主要有百度、淘宝、网易、华为、中国移动等,其中,淘宝的Hadoop集群比较大。据悉,淘宝Hadoop集群拥有2 860个节点,清一色基于英特尔处理器的X86服务器,其总存储容量达到50 PB,实际使用容量超过40PB,日均作业数高达15万,服务于阿里巴巴集团各部门,数据来源于各部门产品的线上数据库(Oracle、MySQL)备份、系统日志以及爬虫数据,每天在Hadoop集群运行各种MapReduce任务,如数据魔方、量子统计、推荐系统、排行榜等。
作为全球最大的中文搜索引擎公司,百度对海量数据的存储和处理要求是非常高的。因此,百度选择了Hadoop,主要用于日志的存储和统计、网页数据的分析和挖掘、商业分析、在线数据反馈、网页聚类等。百度目前拥有3个Hadoop集群,计算机节点数量在700个左右,并且规模还在不断增加中,每天运行的MapReduce任务在3 000个左右,处理数据约120 TB/天。
华为是 Hadoop 的使用者,也是 Hadoop 技术的重要推动者。由雅虎成立的 Hadoop 公司Hortonworks 曾经发布一份报告,用来说明各个公司对 Hadoop 发展的贡献。其中,华为公司在Hadoop重要贡献公司名单内,排在谷歌和思科公司的前面,说明华为公司也在积极参与开源社区贡献。
2.1.5 Hadoop的版本
Apache Hadoop版本分为两代,第一代Hadoop称为Hadoop 1.0,第二代Hadoop称为Hadoop 2.0。第一代Hadoop包含0.20.x、0.21.x和0.22.x三大版本,其中,0.20.x最后演化成1.0.x,变成了稳定版,而0.21.x和0.22.x则增加了HDFS HA等重要的新特性。第二代Hadoop包含0.23.x和2.x两大版本,它们完全不同于Hadoop 1.0,是一套全新的架构,均包含HDFS Federation和YARN(Yet Another Resource Negotiator)两个系统。
除了免费开源的Apache Hadoop以外,还有一些商业公司推出Hadoop的发行版。2008年,Cloudera成为第一个Hadoop商业化公司,并在2009年推出第一个Hadoop发行版。此后,很多大公司也加入了做 Hadoop产品化的行列,比如 MapR、Hortonworks、星环等。一般而言,商业化公司推出的Hadoop发行版也是以Apache Hadoop为基础,但是前者比后者具有更好的易用性、更多的功能以及更高的性能。