Hadoop概述

来源:互联网 发布:保密电话软件 编辑:程序博客网 时间:2024/04/27 10:30

注:文中图表未附,转载请注明

1.Hadoop概述

Hadoop是一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力高速运算和存储。下面将从几个方面阐述。

2.1 Hadoop起源及简介

Hadoop起源于Google的集群系统, Google的数据中心使用廉价LinuxPC机组成集群,在上面运行各种应用。即使是分布式开发的新手也可以迅速使用Google的基础设施。其核心组件有3个:第一个就是,GFS(GoogleFileSystem),一个分布式文件系统,隐藏下层负载均衡,冗余复制等细节,对上层程序提供一个统一的文件系统API接口;第二个是MapReduce,Google发现大多数分布式运算可以抽象为MapReduce操作。Map是把输入Input分解成中间的Key/Value对,Reduce把Key/Value合成最终输出Output。这两个函数由程序员提供给系统,下层设施把Map和Reduce操作分布在集群上运行,并把结果存储在GFS上;第三个,BigTable,一个大型的分布式数据库,这个数据库不是关系式的数据库,而是一个巨大的表格,用来存储结构化的数据。

而Hadoop就是Google集群系统的一个开源实现,是一个项目总称。主要是由HDFS、MapReduce和Hbase组成。其中HDFS是GoogleFile System(GFS)的开源实现; MapReduce是Google MapReduce的开源实现;HBase是Google BigTable的开源实现。

  这个分布式框架很有创造性,而且有极大的扩展性,使得Google在系统吞吐量上有很大的竞争力。因此Apache基金会用Java实现了一个开源版本,支持Fedora、Ubuntu等Linux平台。目前Hadoop受到Yahoo的支持,有Yahoo员工长期工作在项目上,而且Yahoo内部也准备使用Hadoop代替原来的的分布式系统。

Hadoop实现了HDFS文件系统和MapRecue,使Hadoop成为了一个分布式的计算平台。用户只要MapReduceBase,提供分别实现Map和Reduce的两个类,并注册Job即可自动分布式运行。因此,Hadoop并不仅仅是一个用于存储的分布式文件系统,而是设计用来在由通用计算设备组成的大型集群上执行分布式应用的框架。

2.2  Hadoop发展历程与现状

在谈Hadoop的发展之前我们不得不提到Lucene和Nutch,首先,Lucene并不是一个应用程序,而是提供了一个纯Java的高性能全文索引引擎工具包,它可以方便的嵌入到各种实际应用中实现全文搜索/索引功能。Nutch是一个应用程序,是一个以Lucene为基础实现的搜索引擎应用,Lucene

为Nutch提供了文本搜索和索引的API,Nutch不光有搜索的功能,还有数据抓取的功能。在nutch0.8.0版本之前,Hadoop还属于Nutch的一部分,而从nutch0.8.0开始,将其中实现的NDFS和MapReduce剥离出来成立一个新的开源项目,这就是Hadoop,而nutch0.8.0版本较之以前的Nutch在架构上有了根本性的变化,那就是完全构建在Hadoop的基础之上了。 

   在2004年,DougCutting 和 MikeCafarella实现了hadoop分布式文件系统(HDFS)和Map-Reduce并发布了最初版;2005年12月,hadoop稳定运行在20个节点的集群;2006年1月,DougCutting加入Yahoo!,同年二月Apache Hadoop项目开始正式支持HDFS和Map-Reduce的独立研发;三月Yahoo!建立了一个300个节点的Hadoop集群,并在500个节点集群上Sortbenchmark稳定运行了42小时,在2007年一月Hadoop单cluster集群已达900个节点,2008年4月,取得了在900个节点的集群上运行1 terabyte sortbenchmark仅用了209秒时间,2009年四月,取得了在1400的节点的集群上对500G数据排序仅用了59秒的成绩。

    今天Hadoop已经是Hadoop相关子项目的集合,包括Core,Avro,HDFS,MapReduce,ZooKeeper,Pig,Chukwa,Hive,Hbase,这个项目由Apache软件基金会主持。

2.3  Hadoop的相关资源

现在在云计算研究领域每个研究团队都有自己的云计算架构去实现云计算这一领先的信息技术,而Hadoop就是一个非常优秀的分布式系统基础架构,可以说云计算的蓬勃发展与Hadoop的研究有很大关系,与此同时也催生了很多相关应用的技术支持网站和论坛。下面将对Hadoop的相关资源做一个简要的总结,相关研究人员可选择性的访问和借鉴。

2.3.1 Hadoop官方资源

网址:hadoop.apache.org,www.hadoop.org.cn 和dev.yahoo.hadoop

这些都是最权威的官方资源,是学习Hadoop的第一手资源,其中Hadoop官方网站对Hadoop做了最权威的介绍,包括Avro,Chkwa,HBase,HDFS,

Hive,MapReduce,Pig,ZeeKeeper。www.hadoop.org.cn是一个hadoop研究的中文站点,很具有参考价值。

 2.3.2 hadoop相关手册

1 hdfs命令行指南:http://hadoop.apache.org/core/docs/current/commands_manual.html#fsck;

这个文档对HDFS的命令做了非常详细的介绍。

http://www.blogjava.net/killme2008/archive/2008/06/05/206043.html

这是一个研究hadoop的一个blog,其中对Hadoop分布式文件系统:架构和设计要点做了中文介绍。

2 hadoop源码分析的博客:

http://blog.csdn.net/ww_great/archive/2008/11/14/3296724.aspx

http://blog.csdn.net/xymyeah/archive/2008/08/20/2802572.aspx

http://caibinbupt.javaeye.com/blog/270378                    

 http://caibinbupt.javaeye.com/?show_full=true

                      

这些都是hadoop源码分析的博客,可以参考。

还有讲述cascading:

http://www.javaeye.com/news/3507-cascading-a-simple-application-of-hadoop-mapreduce

http://blog.rapleaf.com/dev/?p=33

淘宝数据仓库团队:

站点:http://rdc.taobao.com http://hi.baidu.com这是一个综合性的研究站点,包括大量的有关云计算和hadoop资料,很有参考价值。

4 hadoop部署技术文档:http://www.slideshare.net/steve_l/dynamic-hadoop-clusters

这是一个有关hadoop部署技术站点

2.4 Hadoop的总体结构与模块简介

Hadoop构架图如图2-1所示:

在架构中MapReduceAPI提供Map和Reduce处理、GFS分布式文件系统和BigTable分布式数据库提供数据存取。基于Hadoop可以非常轻松和方便完成处理海量数据的分布式并行程序,并运行于大规模集群上。

Hadoop框架中最核心的设计就是:MapReduce和HDFS。MapReduce的思想是由Google的一篇论文所提及而被广为流传的,简单的一句话解释MapReduce就是“任务的分解与结果的汇总”。HDFS是Hadoop分布式文件系统(HadoopDistributed File System)的缩写,是GFS的一个实现,为分布式计算存储提供了底层支持。

在分布式系统中,机器集群就可以看作硬件资源池,将并行的任务拆分交由每一个空闲机器资源去处理,能够极大地提高计算效率,同时这种资源无关性,对于计算集群的扩展无疑提供了最好的设计保证。任务分解处理以后,那就需要将处理以后的结果在汇总起来,这就是Reduce要做的工作。

 

图2-2

图2-2就是MapReduce大致的结构图,在Map前还可能会对输入的数据有split的过程,保证任务并行效率,在Map之后还会有shuffle的过程,对于提高Reduce的效率以及减小数据传输的压力有很大的帮助。后面会具体提及这些部分的细节。

 HDFS是分布式计算的存储基石,Hadoop的分布式文件系统和其他分布式文件系统有很多类似的特质。

分布式文件系统基本的几个特点:

1.对于整个集群有单一的命名空间。

2.数据一致性。适合一次写入多次读取的模型,客户端在文件没有被成功创建之前是无法看到文件存在。

3.文件会被分割成多个文件块,每个文件块被分配存储到数据节点上,而且根据配置会有复制文件块来保证数据的安全性。

 

图2-3

图2-3中展现了整个HDFS三个重要角色:NameNode,DataNode,Client。

NameNode可以看作是分布式文件系统中的管理者,主要负责管理文件系统的命名空间,集群配置信息,存储块的复制。NameNode会存储文件系统的Meta-data在内存中,这些信息主要包括了文件信息,每一个文件对应的文件块的信息,每一个文件块在DataNode的信息。

DataNode是文件存储的基本单元。它存储Block在本地文件系统中,保存了Block的Meta-data,同时周期性的发送所有存在的block的报告给NameNode。

Client就是需要获取分布式文件系统文件的应用程序。

这里通过三个操作来说明他们之间的交互关系。

文件写入:

1. Client向NameNode发起文件写入的请求。

2.NameNode根据文件大小和文件块配置情况,返回给Client它所管理部分DataNode的信息。

3.Client将文件划分为多个Block,根据DataNode的地址信息,按顺序写入到每一个DataNode块中。

文件读取:

1. Client向NameNode发起文件读取的请求。

2. NameNode返回文件存储的DataNode的信息。

3. Client读取文件信息。

文件Block复制:

1. NameNode发现部分文件的block不符合最小复制数或者部分DataNode失效。

2.通知DataNode相互复制Block。

3. DataNode开始直接相互复制。

综合MapReduce和HDFS来看Hadoop的结构:如图2-4

 

 图2-4

 在Hadoop的系统中,会有一台Master,主要负责NameNode的工作以及JobTracker的工作。JobTracker是的主要职责就是启动,跟踪,调度各个Slave的任务执行。还会有多台Slave,每一台Slave通常具有DataNode的功能以及TaskTracker的工作。TaskTracker根据应用要求来结合本地数据执行Map任务以及Reduce任务。

说到这里,就要提到分布式计算的最重要的一个设计点:Moving Computation isCheaper than MovingData。就是在分布式处理中,移动数据的代价总是高于转移计算的代价。简单来说就是分而治之的工作,需要将数据也分而存储,本地任务处理本地数据然后归总,这样才会保证分布式计算的高效性。

而分布式数据库(BigTable)是一个有序、稀疏、多维度的映射表,有良好的伸缩性和高可用性,用来将数据存储或部署到各个计算节点上。目前的Hbase是BigTable的一个实现,作为Hadoop的子项目独立发布。

今天的Hadoop项目是一系列Hadoop子项目的集合,包括包括Core,Avro,HDFS,MapReduce,ZooKeeper,Pig,Chukwa,Hive,Hbase,由于当前Hadoop发布版主要为HDFS和MapReduce,其他的子项目是独立发布的,所以本文上面讨论的Hadoop是从这两个子项目角度讨论,HDFS和MapReduce更详细的内容将在以后章节深入研究。下面简单介绍一下Hadoop相关子项目。

Core:一套分布式文件系统以及支持Map-Reduce的计算框架;

Avro:定义了一种用于支持大数据应用的数据格式,并为这种格式提供了不同的编程语言的支持;

HDFS:Hadoop分布式文件系统;

Map/Reduce是一个使用简易的软件框架,基于它写出来的应用程序能够运行在由上千个商用机器组成的大型集群上,并以一种可靠容错的方式并行处理上T级别的数据集;

ZooKeeper:是高可用的和可靠的分布式协同(coordination )系统;

Pig:建立于 Hadoop Core之上为并行计算环境提供了一套数据工作流语言和执行框架;

Hive:是为提供简单的数据操作而设计的下一代分布式数据仓库。它提供了简单的类似SQL的语法的HiveQL语言进行数据查询;

Hbase:建立于 Hadoop Core之上提供一个可扩展的数据库系统。

在后面章节我们会分别讨论与本项目研究相关的子项目。

2.5 小结

本章首先从总体上对Hadoop做了介绍,我们了解到Hadoop是一个分布式系统基础构架,接着对其历史起源,发展及现状做了介绍,然后还介绍了研究Hadoop的相关资源,最后从总体构架上认识了Hadoop,这些对后面深入研究起到了基础性作用
原创粉丝点击