精通HADOOP(三) - 初识Hadoop - Hadoop介绍

1.1 Hadoop介绍

Hadoop是阿帕奇软件基金下的顶级项目,这个项目下面拥有多个诞生于阿帕奇孵化器的子项目。Hadoop项目提供和支持开源软件的发展,它提供一个框架,用于开发高度可扩展的分布式计算应用软件。Hadoop框架负责处理任务并行分配的细节,使得应用程序开发者可以专注于应用程序逻辑上。

请注意,Hadoop徽标是一个胖胖的黄色的大象。而且Hadoop碰巧是首席架构师的宝宝的黄色大象的名字。

Hadoop项目主页(http://hadoop.apache.org/)谈到:

Hadoop项目是一个可靠的、可扩展的、基于分布式计算的开源软件,它包括:

Hadoop核心是我们的旗舰项目,它提供了一个分布式文件系统子项目(HDFS)和支持MapReduce分布式计算的软件架构。

HBase建立在Hadoop核心上并提供一个可扩展的分布式数据库。

Pig是一个高高级数据流语言和实施并行计算的框架。它也是构建在Hadoop核心之上的。

ZooKeeper是一个高效的,可靠的协作支持系统。分布式应用程序使用ZooKeeper来存储和传输关键共享状态的更新。

Hive是构建在Hadoop上的数据仓库。它提供了数据提取,数据随机查询和分析的功能。

Hadoop核心项目提供了在低端硬件上构建云计算环境的基础服务,它也提供了运行在这个云中的软件所必须的API接口。Hadoop内核的两个基本部分是MapReduce框架,也就是云计算环境,和Hadoop分布式文件系统(HDFS)。

请注意,在Hadoop核心框架中,MapReduce常被称为mapred,HDFS经常被称为dfs。

Hadoop核心MapReduce框架需要一个共享文件系统。这个共享文件系统并不需要是一个系统级的文件系统,任何一个分布式文件系统可以供框架使用就可以满足MapReduce的需求。

尽管Hadoop核心提供了HDFS分布式文件系统,但是,没有这个分布式文件系统它仍然可以工作。在Hadoop JIRA(Bug跟踪系统), 第1686项就是用来跟踪如何将HDFS从Hadoop分离使用。除了HDFS,Hadoop核心也支持云存储(原名为Kosmos)文件系统(http://kosmosfs.sourceforge.net/)和亚马逊简单存储服务(S3)文件系统(http://aws.amazon.com/s3/)。Hadoop核心框架通过专用的接口访问HDFS,云存储和S3。用户可以自由地使用任何分布式文件系统,只要它是一个系统可映射的文件系统,例如,网络文件系统(NFS),全局文件系统(GFS)或者Lustre。

当把HDFS作为共享文件系统,Hadoop能够分析得知哪些节点拥有输入的数据拷贝,然后试图调度运行在那台机器的作业去读取那块数据。本书讲述的就是以HDFS文件系统为基础的Hadoop应用和开发。

1.1.1 Hadoop的核心MapReduce

Hadoop MapReduce环境为用户提供了一个复杂的框架在一个集群上来管理和执行Map和Reduce作业。用户需要向框架输入如下信息:

  • 分布式文件系统中作业输入的位置
  • 分布式文件系统中作业输出的位置
  • 输入格式
  • 输出格式
  • 包含Map方法的类
  • 包含Reduce方法的类,它是可选的。
  • 包含Map和Reduce方法和其他支持类的Jar文件的位置

如果一个作业不需要一个Reduce方法,那么,用户不需指定一个Reducer类,作业的Reduce阶段也是不会被执行的。框架会分割输入数据,在集群里调度和执行Map作业。如果需要,它将Map作业的输出进行排序,然后,将排序的结果输出给Reduce任务。最后将Reduce作业输出数据输出到输出目录,最后将工作状况汇报给用户。

MapReduce任务是用来处理键/值对的。该框架将转换每个输入的记录成一个键/值对,每对数据会被输入给Map作业。Map任务的输出是一套键/值对,原则上,输入是一个键/值对,但是,输出可以是多个键/值对。然后,它对Map输出键/值对分组和排序。然后,对排序的每个键值对调用一次Reduce方法,它的输出是一个键值和一套关联的数据值。Reduce方法可以输出任意数量的键/值对,这将被写入工作输出目录下的输出文件。如果Reduce输出键值保持和Reduce输入键值一致,最终的输出仍然保持排序。

该框架提供了两个处理过程来管理MapReduce作业:

  • TaskTracker在集群中的计算节点上管理和执行各个Map和Reduce作业。
  • JobTracker接受作业提交,提供作业的监测和控制,管理任务,以及分配作业到TaskTracker节点上。

一般来说,每个集群有一个JobTracker进程,集群中的每个节点有一个或多个TaskTracker进程。JobTracker是一个关键模块,它出现问题会引起系统的瘫痪,如果一个TaskTracker出现问题,JobTracker会调度其他TaskTracker进程重试。

请注意,Hadoop核心MapReduce环境的一个优秀的功能是:当一个作业在执行时,你可以添加TaskTracker到集群中,还可以派遣一个作业到新的节点上。

1.1.2 Hadoop的分布式文件系统

HDFS是专门为MapReduce作业所设计的文件系统。MapReduce作业从HDFS文件系统中读入大数量级的数据进行处理,处理后把输出写回HDFS文件系统。HDFS并不是用来处理随机存取数据的。为了达到数据的稳定性,它把数据存储到多个存储节点上。在Hadoop社区,我们把它称为副本。只要有一个数据副本存在,数据使用者就可以安全使用这些数据。

HDFS通过两个进程来完成的,

  • NameNode进行文件系统元数据的管理,它提供管理和控制服务。
  • DataNode提供数据块存储和查询服务。

在HDFS文件系统里有一个NameNode进程,它是关键模块,如果它出现问题会引起整个系统的瘫痪。Hadoop核心提供NameNode的恢复和自动备份功能,但是没有运行时恢复功能。一个集群有多个DataNode进程,通常情况下,集群中的每个存储节点有一个DataNode进程。

请注意,在集群中的一个节点中提供TaskTracker服务和DataNode服务是常见的。在一个节点里提供JobTracker和NameNode服务也是常见。

猜你喜欢

转载自blog.csdn.net/robertleepeak/article/details/6003544