前段时间在课上听了一节学术讲座,其中一句话让我印象深刻----未来IT的时代将是集群的时代。从那里我还了解到了Hadoop一些简单的东西,觉得蛮帅气的……

  • Hadoop 由 Apache Software Foundation 公司于 2005 年秋天作为 Lucene 的子 hadoop logo项目 Nutch 的一部分正式引入。
  • Hadoop 是一个能够对大量数据进行分布式处理的软件框架。但是 Hadoop 是以一种可靠、高效、可伸缩的方式进行处理的。Hadoop 是可靠的,因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。Hadoop 是高效的,因为它以并行的方式工作,通过并行处理加快处理速度。Hadoop 还是可伸缩的,能够处理 PB 级数据。此外,Hadoop 依赖于社区服务器,因此它的成本比较低,任何人都可以使用。
  • Hadoop有许多元素构成的:HDFS、MapReduce、BigTable  为最主要的元素。

    HDFS   

    :对于外部客户机而言,HDFS就像一个传统的分级文件系统,可以创建、删除、移动或者重命名……。实际上HDF的架构师是基于一组特定的节点创建的。这些节点包括:NameNode(仅一个)-----在HDFS内部提供元数据服务;DateNode(多个)-----拓为HDFS提供存储块

    :存储在HDFS中的文件被分成块,然后将这些块复制到多个计算机中(DataNode),NameNode可以控制所有文件的操作

NameNode

:NameNode是一个通常在HDFS实例中单独机器上运行的软件。它负责管理文件系统名称空间和控制外部客户机的访问。它决定是否将会文件映射到DateNode上的复制块上。对于NameNode并不进行具体的IO操作,当外部客户机发生请求要求创建文件时NameNode 会议标识块和该块的第一个副本的DateNode IP地址作为响应。

:NameNode在一个成为sImage的文件中存储所有有关于文件系统名称空间的信息,这个文件包含所有事物的记录文件(EditLog)将存储在NameNode的本地文件系统上。其中FsImage和EditLog文件也需要复制副本,以防止文件损毁或者NameNode系统丢失

DataNode

:DateNode通常是在一个HDFS实例中单独机器上运行的软件,DataNode通常以机架的形式组织,机架通过一个交换机将所有的系统链接起来。

:DateNode 响应来自HDFS客户机的读写请求。他们还想应创建、删除和复制及来自NameNode块的命令

:NameNode依赖来自于每个DataNode的定期心跳消息。每条消息都包含了一个块报告,NameNode可以根据这个报告验证映射和其他文件系统的元数据。如果DateNode不发送心跳消息,NameNode 将会采取修复措施。

MapReduce

:最基本的MapReduce包括了Map、Reduce、mian函数,Google发现大多数分布式运算可以抽象为MapReduce操作。Map是把输入Input分解成中间的Key/Value对,Reduce把Key/Value合成最终输出Output。这两个函数由程序员提供给系统,下层设施把Map和Reduce操作分布在集群上运行,并把结果存储在GFS上。

BigTable

:一个大型的分布式数据库,这个数据库不是关系式的数据库。像它的名字一样,就是一个巨大的表格,用来存储结构化的数据。

Hadoop还为其他子项目提供配套服务,其他子项目提供补充性的服务。提供补充性的服务。这些子项目的简要描述如下

Core

一系列分布式文件系统和通用I/O的组件和接口(序列化、Java RPC和持久化数据结构)。

Avro

一种提供高效、跨语言RPC的数据序列系统,持久化数据存储。(在本书写作期间,Avro只是被当作一个新的子项目创建,而且尚未有其他Hadoop子项目在使用它。)

MapReduce

分布式数据处理模式和执行环境,运行于大型商用机集群。

HDFS

分布式文件系统,运行于大型商用机集群。

Pig

一种数据流语言和运行环境,用以检索非常大的数据集。Pig运行在MapReduce和HDFS的集群上。

Hbase

一个分布式的、列存储数据库。HBase使用HDFS作为底层存储,同时支持MapReduce的批量式计算和点查询(随机读取)。

ZooKeeper

一个分布式的、高可用性的协调服务。ZooKeeper提供分布式锁之类的基本服务用于构建分布式应用。
Hive

分布式数据仓库。Hive管理HDFS中存储的数据,并提供基于SQL的查询语言(由运行时引擎翻译成MapReduce作业)用以查询数据。

Chukwa

分布式数据收集和分析系统。Chukwa运行HDFS中存储数据的收集器,它用MapReduce来生成报告。

下面来自于:http://www.cnblogs.com/mdyang/archive/2011/7/8.html

Hadoop的架构图:

       Hadoop 的简单的认识 

     将上面的所有功能模块整合起来,我们就可以得到完整的Hadoop集群架构(如上图):

1) HDFS namenode上运行namenode守护进程(daemon)

2) 工作提交节点(job submission node)上运行工作追踪器(jobtracker),这种节点直接与客户端连接,接受MapReduce工作(job)。jobtracker监测MapReduce工作的执行状态,协调mapper和reducer的执行序。

一般来说这两种节点(1)和2))分开部署于不同的物理机之上,而在相对较小的集群中也有协同部署的情况存在(即1)和2)部署于同一台机器上)。

一个MapReduce工作被分割成一定数量的map任务(task)和reduce任务。任务追踪器(tasktracker)周期性地向jobtracker发送搏动消息(heartbeat message),jobtracker收到搏动消息后发送反馈消息。当tasktracker能够执行新任务时(在Hadoop中体现为tasktracker的任务槽中有了空槽位),jobtracker的反馈信息中将会包含新任务的相关信息。

reducer的数量由程序员编程指定。而mapper的数量则取决于多个因素:程序员可在程序中指定mapper数量,而最终的实际数量由Hadoop根据多个因素(程序指定数、输入文件的数量、文件的块数)确定。执行时,每个mapper将被分配一个key-value对的序列(在Hadoop中称为一个输入分割,即an input split)。input split由执行框架自动计算出,执行框架尽量保证每个input split恰好对应一个HDFS数据块大小,使得每个mapper得到的数据量都是一个块。调度mapper执行时,jobtracker将会尽量利用好数据局部性:jobtracker尽量让每个mapper都在持有其将要处理的数据的机器上执行,这样每个mapper都将只处理局部数据(避免网络传输)。对于实在无法运行在本机的mapper,将会通过网络传输的方法解决(比如mapper1处理b1,mapper2处理b2,b1与b2均位于node1上,而node1只能执行一个mapper。当mapper1已经分配至node1时,mapper2只能分配至别的机器上,比如node2,然后将b2从node1传输至node2处理)。在更大规模的集群中,则有更为广义的局部性可以利用:例如机架(rack)内(intra-rack)的网络带宽远远超出机架间(inter-rack)的网络带宽,则如果不能保证数据本机,则退而求其次保证数据本机架(例如在上面那个例子的情况下,node1与node2位于同一个机架中,也算一种局部性)。

单单从概念上讲,可以理解为对输入数据的每个key-value对使用mapper,得到的中间结果经过分组、排序后,对每组具有相同key的中间结果key-value对使用reducer. 不过实际的执行更为复杂。

在Hadoop中,mapper是一个带有Map方法的Java对象,对于每个任务(task),由tasktracker生成一个mapper对象。mapper对象生成时将会挂载Hadoop API中的钩子(hook),可用来触发用户自定义的预处理程序代码。这意味着mapper在执行时可读入额外数据(例如程序状态、静态数据、字典等)。初始化完成后执行框架对所有输入数据执行Map方法。每个特定input split中的所有key-value对都由一个mapper对象处理,因此可以根据应用需求在每个mapper中记录当前上下文的处理状态,这个特性对于设计MapReduce算法十分重要。所有mapper输入数据处理完毕后,还可以执行用户自定义的后处理操作,这也是一个很重要的特性。

reducer的执行与mapper类似:对于每个reduce任务生成一个reducer对象,reducer对象也可以执行用户自定义的预处理和后处理操作。初始化完成后,对于每个划分(partition,由partitioner生成),对其中的每个key-value对迭代处理(MapReduce保证这个输入序列是有序的)。同样,对于每组reduce输入的处理都在一个reducer对象中完成,因此可以记录上下文信息(这对于MapReduce算法设计也很重要)。

转载于:https://my.oschina.net/kisshua/blog/63974

相关文章: