Hadoop技术内幕:深入解析Hadoop Common和HDFS架构设计与实现原理 第1章 源代码环境准备 1.1 什么是Hadoop...

第一部分 环境准备

本部分内容

源代码环境准备

第1章 源代码环境准备

数据!数据!数据!

今天,我们正被数据包围。全球43亿部电话、20亿位互联网用户每秒都在不断地产生大量数据,人们发送短信给朋友、上传视频、用手机拍照、更新社交网站的信息、转发微博、点击广告等,使得机器产生和保留了越来越多的数据。数据的指数级增长对处于市场领导地位的互联网公司,如Facebook、谷歌、雅虎、亚马逊、腾讯等提出了挑战。它们需要对TB级别和PB级别的数据进行分析处理,以发现哪些网站更受欢迎,哪些商品更具有吸引力,哪些广告更吸引用户。传统的工具对于处理如此规模的数据集越来越无能为力。

现在,Hadoop应运而生,庞大的信息流有了新的处理平台。

1.1 什么是Hadoop

Hadoop是Apache基金会下的一个开源分布式计算平台,以Hadoop分布式文件系统(Hadoop Distributed File System,HDFS)和MapReduce分布式计算框架为核心,为用户提供了底层细节透明的分布式基础设施。HDFS的高容错性、高伸缩性等优点,允许用户将Hadoop部署在廉价的硬件上,构建分布式系统;MapReduce分布式计算计算框架则允许用户在不了解分布式系统底层细节的情况下开发并行、分布的应用程序,充分利用大规模的计算资源,解决传统高性能单机无法解决的大数据处理问题。

Apache Hadoop是目前分析海量数据的首选工具。

1.1.1 Hadoop简史

谈到Hadoop的历史,就不得不提到Lucene和Nutch。Hadoop开始时是Nutch的一个子项目,而Nutch又是Apache Lucene的子项目。这3个项目都是由Doug Cutting创立,每个项目在逻辑上都是前一个项目的演进。

Lucene是引擎开发工具包,提供了一个纯Java的高性能全文索引,它可以方便地嵌入各种实际应用中实现全文搜索/索引功能。Nutch项目开始于2002年,是以Lucene为基础实现的搜索引擎应用。Lucene为Nutch提供了文本搜索和索引的API,Nutch不光有搜索功能,还有数据抓取的功能。

但很快,Doug Cutting和Mike Calarella(Hadoop和Nutch的另一位创始人)就意识到,他们的架构无法扩展以支持拥有数十亿网页的网络。这个时候,Google的研究人员在2003年的ACM SOSP(Symposium on Operating Systems Principles)会议上发表的描述Google分布式文件系统(简称GFS)的论文及时地为他们提供了帮助。GFS或类似的系统可以解决他们在网络抓取和索引过程中产生的大量文件存储需求。于是,在2004年,他们开始写GFS的一个开源实现,即Nutch分布式文件系统(NDFS)。

2004年,在OSDI(Operating Systems Design and Implementation)会议上,Google发表了论文,向全世界介绍了MapReduce。2005年初,Nutch的开发者在Nutch上有了一个可工作的MapReduce应用,到当年的年中,所有主要的Nutch算法被迁移到MapReduce和NDFS上。

在Nutch0.8.0版本之前,Hadoop还属于Nutch的一部分,而从Nutch0.8.0开始,Doug Cutting等人将其中实现的NDFS和MapReduce剥离出来成立了一个新的开源项目,这就是Hadoop。同时,对比以前的Nutch版本,Nutch0.8.0在架构上有了根本性的变化,它完全构建在Hadoop的基础之上了。这个时候,已经是2006年2月,大约在同一时间,Doug Cutting加入雅虎,Yahoo投入了专门的团队和资源将Hadoop发展成一个可在网络上运行的系统。

值得一提的是Hadoop名字的来源。

为软件项目命名时,Doug Cutting似乎总会得到家人的启发。Lucene是他妻子的中间名,也是她外祖母的名字。他的儿子在咿呀学语时,总把所有用于吃饭的词叫成Nutch。Doug Cutting如此解释Hadoop的得名:“这是我的孩子给一头吃饱了的棕黄色大象起的名字。我的命名标准就是简短,容易发音和拼写,没有太多的意义,并且不会被用于别处。小孩子是这方面的高手,Googol就是由小孩命名的。”

2008年1月,Hadoop已成为Apache顶级项目,证明它是成功的。通过这次机会,Hadoop成功地被雅虎之外的很多公司应用,如Facebook、纽约时报等。特别是纽约时报,它使用运行在亚马逊的EC2云计算上的Hadoop,将4TB的报纸扫描文档压缩,转换为用于Web的PDF文档,这个过程历时不到24小时,使用100台机器运行,这成为Hadoop一个良好的宣传范例。

2008年2月,雅虎宣布其索引网页的生产系统采用了在10 000多个核的Linux集群上运行的Hadoop。Hadoop真正达到了万维网的规模。2008年4月,在一个900节点的Hadoop集群上,雅虎的研究人员运行1TB的Jim Gray基准排序,只用了209秒,而到了2009年4月,在一个1400节点的集群上对500GB数据进行排序,只用了59秒,这显示了Hadoop强大的计算能力。

2008年开始,Hadoop迈向主流,开始了它的爆发式发展,出现了大量的相关项目,如2008年的HBase、ZooKeeper和Mahout,2009年的Pig、Hive等。同时,还出现了像Cloudera(成立于2008年)和Hortonworks(以雅虎的Hadoop业务部门为基础成立的公司)这样的专注于Hadoop的公司。

经过多年的发展,Hadoop已经从初出茅庐的小象变身为行业巨人。

1.1.2 Hadoop的优势

将Hadoop运用于海量数据处理,主要有如下几个优势:

方便:Hadoop可以运行在一般商业机器构成的大型集群上,或者是亚马逊弹性计算云(Amazon EC2)等云计算服务上。

弹性:Hadoop通过增加集群节点,可以线性地扩展以处理更大的数据集。同时,在集群负载下降时,也可以减少节点,以高效使用计算资源。

健壮:Hadoop在设计之初,就将故障检测和自动恢复作为一个设计目标,它可以从容处理通用计算平台上出现的硬件失效的情况。

简单:Hadoop允许用户快速编写出高效的并行分布代码。

由于Hadoop具有上述优势,使得Hadoop在学术界和工业界都大受欢迎。今天,Hadoop已经成为许多公司和大学基础计算平台的一部分。学术界如内布拉斯加大学通过使用Hadoop,支持紧凑型子螺旋形磁谱仪实验数据的保存和计算;加州大学伯克利分校则对Hadoop进行研究,以提高其整体性能;在国内,中国科学院计算技术研究所在Hadoop上开展了数据挖掘和地理信息处理等的研究。在工业界,Hadoop已经成为很多互联网公司基础计算平台的一个核心部分,如雅虎、Facebook、腾讯等;传统行业,如传媒、电信、金融,也在使用这个系统,进行数据存储与处理。

如今,Hadoop分布式计算基础架构这把“大伞”下,已经包含了多个子项目。而海量数据处理也迅速成为许多程序员需要掌握的一项重要技能。

1.1.3 Hadoop生态系统(1)

经过几年的快速发展,Hadoop现在已经发展成为包含多个相关项目的软件生态系统。狭义的Hadoop核心只包括Hadoop Common、Hadoop HDFS和Hadoop MapReduce三个子项目,但和Hadoop核心密切相关的,还包括Avro、ZooKeeper、Hive、Pig和HBase等项目,构建在这些项目之上的,面向具体领域、应用的Mahout、X-Rime、Crossbow和Ivory等项目,以及Chukwa、Flume、Sqoop、Oozie和Karmasphere等数据交换、工作流和开发环境这样的外围支撑系统。它们提供了互补性的服务,共同提供了一个海量数据处理的软件生态系统,Hadoop生态系统如图1-1所示。

Hadoop技术内幕:深入解析Hadoop Common和HDFS架构设计与实现原理 第1章 源代码环境准备 1.1 什么是Hadoop..._第1张图片

下面详细介绍生态系统的组成。

1. Hadoop Common

从Hadoop 0.20版本开始,原来Hadoop项目的Core部分更名为Hadoop Common。Common为Hadoop的其他项目提供了一些常用工具,主要包括系统配置工具Configuration、远程过程调用RPC、序列化机制和Hadoop抽象文件系统FileSystem等。它们为在通用硬件上搭建云计算环境提供基本的服务,并为运行在该平台上的软件开发提供了所需的API。

2. Avro

Avro由Doug Cutting牵头开发,是一个数据序列化系统。类似于其他序列化机制,Avro可以将数据结构或者对象转换成便于存储和传输的格式,其设计目标是用于支持数据密集型应用,适合大规模数据的存储与交换。Avro提供了丰富的数据结构类型、快速可压缩的二进制数据格式、存储持久性数据的文件集、远程调用RPC和简单动态语言集成等功能。

3. ZooKeeper

在分布式系统中如何就某个值(决议)达成一致,是一个十分重要的基础问题。ZooKeeper作为一个分布式的服务框架,解决了分布式计算中的一致性问题。在此基础上,ZooKeeper可用于处理分布式应用中经常遇到的一些数据管理问题,如统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。ZooKeeper常作为其他Hadoop相关项目的主要组件,发挥着越来越重要的作用。

4. HDFS

HDFS(Hadoop Distributed File System,Hadoop分布式文件系统)是Hadoop体系中数据存储管理的基础。它是一个高度容错的系统,能检测和应对硬件故障,用于在低成本的通用硬件上运行。HDFS简化了文件的一致性模型,通过流式数据访问,提供高吞吐量应用程序数据访问功能,适合带有大型数据集的应用程序。

5. MapReduce

MapReduce是一种计算模型,用以进行大数据量的计算。Hadoop的MapReduce实现,和Common、HDFS一起,构成了Hadoop发展初期的三个组件。MapReduce将应用划分为Map和Reduce两个步骤,其中Map对数据集上的独立元素进行指定的操作,生成键-值对形式中间结果。Reduce则对中间结果中相同“键”的所有“值”进行规约,以得到最终结果。MapReduce这样的功能划分,非常适合在大量计算机组成的分布式并行环境里进行数据处理。

6. HBase

Google发表了BigTable系统论文后,开源社区就开始在HDFS上构建相应的实现HBase。HBase是一个针对结构化数据的可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库。和传统关系数据库不同,HBase采用了BigTable的数据模型:增强的稀疏排序映射表(Key/Value),其中,键由行关键字、列关键字和时间戳构成。HBase提供了对大规模数据的随机、实时读写访问,同时,HBase中保存的数据可以使用MapReduce来处理,它将数据存储和并行计算完美地结合在一起。

7. Hive

Hive是Hadoop中的一个重要子项目,最早由Facebook设计,是建立在Hadoop基础上的数据仓库架构,它为数据仓库的管理提供了许多功能,包括:数据ETL(抽取、转换和加载)工具、数据存储管理和大型数据集的查询和分析能力。Hive提供的是一种结构化数据的机制,定义了类似于传统关系数据库中的类SQL语言:Hive QL,通过该查询语言,数据分析人员可以很方便地运行数据分析业务。

8. Pig

Pig运行在Hadoop上,是对大型数据集进行分析和评估的平台。它简化了使用Hadoop进行数据分析的要求,提供了一个高层次的、面向领域的抽象语言:Pig Latin。通过Pig Latin,数据工程师可以将复杂且相互关联的数据分析任务编码为Pig操作上的数据流脚本,通过将该脚本转换为MapReduce任务链,在Hadoop上执行。和Hive一样,Pig降低了对大型数据集进行分析和评估的门槛。

1.1.3 Hadoop生态系统(2)

9. Mahout

Mahout起源于2008年,最初是Apache Lucent的子项目,它在极短的时间内取得了长足的发展,现在是Apache的顶级项目。Mahout的主要目标是创建一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。Mahout现在已经包含了聚类、分类、推荐引擎(协同过滤)和频繁集挖掘等广泛使用的数据挖掘方法。除了算法,Mahout还包含数据的输入/输出工具、与其他存储系统(如数据库、MongoDB 或Cassandra)集成等数据挖掘支持架构。

10. X-RIME

X-RIME是一个开源的社会网络分析工具,它提供了一套基于Hadoop的大规模社会网络/复杂网络分析工具包。X-RIME在MapReduce 的框架上对十几种社会网络分析算法进行了并行化与分布式化,从而实现了对互联网级大规模社会网络/复杂网络的分析。它包括HDFS存储系统上的一套适合大规模社会网络分析的数据模型、基于MapReduce实现的一系列社会网络分析分布式并行算法和X-RIME处理模型,即X-RIME工具链等三部分。

11. Crossbow

Crossbow是在Bowtie和SOAPsnp基础上,结合Hadoop的可扩展工具,该工具能够充分利用集群进行生物计算。其中,Bowtie是一个快速、高效的基因短序列拼接至模板基因组工具;SOAPsnp则是一个重测序一致性序列建造程序。它们在复杂遗传病和肿瘤易感的基因定位,到群体和进化遗传学研究中发挥着重要的作用。Crossbow利用了Hadoop Stream,将Bowtie、SOAPsnp上的计算任务分布到Hadoop集群中,满足了新一代基因测序技术带来的海量数据存储及计算分析要求。

12. Chukwa

Chukwa是开源的数据收集系统,用于监控大规模分布式系统(2000+以上的节点, 系统每天产生的监控数据量在T级别)。它构建在Hadoop的HDFS和MapReduce基础之上,继承了Hadoop的可伸缩性和鲁棒性。Chukwa包含一个强大和灵活的工具集,提供了数据的生成、收集、排序、去重、分析和展示等一系列功能,是Hadoop使用者、集群运营人员和管理人员的必备工具。

13. Flume

Flume是Cloudera开发维护的分布式、可靠、高可用的日志收集系统。它将数据从产生、传输、处理并最终写入目标的路径的过程抽象为数据流,在具体的数据流中,数据源支持在Flume中定制数据发送方,从而支持收集各种不同协议数据。同时,Flume数据流提供对日志数据进行简单处理的能力,如过滤、格式转换等。此外,Flume还具有能够将日志写往各种数据目标(可定制)的能力。总的来说,Flume是一个可扩展、适合复杂环境的海量日志收集系统。

14. Sqoop

Sqoop是SQL-to-Hadoop的缩写,是Hadoop的周边工具,它的主要作用是在结构化数据存储与Hadoop之间进行数据交换。Sqoop可以将一个关系型数据库(例如MySQL、Oracle、PostgreSQL等)中的数据导入Hadoop的HDFS、Hive中,也可以将HDFS、Hive中的数据导入关系型数据库中。Sqoop充分利用了Hadoop的优点,整个数据导入导出过程都是用MapReduce实现并行化,同时,该过程中的大部分步骤自动执行,非常方便。

15. Oozie

在Hadoop中执行数据处理工作,有时候需要把多个作业连接到一起,才能达到最终目的。针对上述需求,Yahoo开发了开源工作流引擎Oozie,用于管理和协调多个运行在Hadoop平台上的作业。在Oozie中,计算作业被抽象为动作,控制流节点则用于构建动作间的依赖关系,它们一起组成一个有向无环的工作流,描述了一项完整的数据处理工作。Oozie工作流系统可以提高数据处理流程的柔性,改善Hadoop集群的效率,并降低开发和运营人员的工作量。

16. Karmasphere

Karmasphere包括Karmasphere Analyst和Karmasphere Studio。其中,Analyst提供了访问保存在Hadoop里面的结构化和非结构化数据的能力,用户可以运用SQL或其他语言,进行即时查询并做进一步的分析。Studio则是基于NetBeans的MapReduce集成开发环境,开发人员可以利用它方便快速地创建基于Hadoop的MapReduce应用。同时,该工具还提供了一些可视化工具,用于监控任务的执行,显示任务间的输入输出和交互等。需要注意的是,在上面提及的这些项目中,Karmasphere是唯一不开源的工具。

正是这些项目的发展,带来了廉价的处理大数据的能力,让Hadoop成为大数据行业发展背后的驱动力。如今,Hadoop已成为分布式大数据处理事实上的标准。

你可能感兴趣的:(Hadoop技术内幕:深入解析Hadoop Common和HDFS架构设计与实现原理 第1章 源代码环境准备 1.1 什么是Hadoop...)