分布式系统基础架构-Hadoop
2014-08-17 10:11:53 阿炯

Hadoop 是一个分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序,充分利用集群的威力高速运算和存储。它采用Java开发并在Apache协议下授权。Hadoop由 Apache Software Foundation 公司于 2005 年秋天作为Lucene的子项目Nutch的一部分正式引入。它受到最先由 Google Lab 开发的 Map/Reduce和Google File System(GFS)的启发。它本身是一种分布式数据和计算的框架,很擅长存储大量的半结构化的数据集,数据可以随机存放,所以一个磁盘的失败并不会带来数据丢失。Hadoop也非常擅长分布式计算,快速地跨多台机器处理大型数据集合。2008年1月,Hadoop成为Apache顶级项目。

Hadoop是项目的总称,主要是由HDFS和MapReduce组成:
HDFS是Google File System(GFS)的开源实现。

MapReduce是Google MapReduce的开源实现。


The Apache™ Hadoop® project develops open-source software for reliable, scalable, distributed computing.

The Apache Hadoop software library is a framework that allows for the distributed processing of large data sets across clusters of computers using simple programming models. It is designed to scale up from single servers to thousands of machines, each offering local computation and storage. Rather than rely on hardware to deliver high-availability, the library itself is designed to detect and handle failures at the application layer, so delivering a highly-available service on top of a cluster of computers, each of which may be prone to failures.

Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。Hadoop 由许多元素构成,其最底部是 Hadoop Distributed File System(HDFS),它存储 Hadoop 集群中所有存储节点上的文件。HDFS的上一层是MapReduce引擎,该引擎由 JobTrackers 和 TaskTrackers 组成。通过对Hadoop分布式计算平台最核心的分布式文件系统HDFS、MapReduce处理过程,以及数据仓库工具Hive和分布式数据库Hbase的介绍,基本涵盖了Hadoop分布式平台的所有技术核心。

MapReduce是处理大量半结构化数据集合的编程模型,编程模型是一种处理并结构化特定问题的方式。例如,在一个关系数据库中,使用一种集合语言(如SQL)执行查询,告诉语言想要的结果,并将它提交给系统来计算出如何产生计算。还可以用更传统的语言一步步地来解决问题。

Hadoop是一个能够让用户轻松架构和使用的分布式计算平台,用户可以轻松地在Hadoop上开发和运行处理海量数据的应用程序。它主要有以下几个优点:
高可靠性,Hadoop按位存储和处理数据的能力值得人们信赖。

高扩展性,Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。

高效性,Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。

高容错性,Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。

低成本,与一体机、商用数据仓库等相比,hadoop是开源的,项目的软件成本因此会大大降低。

The project includes these modules:
Hadoop Common: The common utilities that support the other Hadoop modules.
Hadoop Distributed File System (HDFS™): A distributed file system that provides high-throughput access to application data.
Hadoop YARN: A framework for job scheduling and cluster resource management.
Hadoop MapReduce: A YARN-based system for parallel processing of large data sets.

Hadoop也跟其他云计算项目有共同点和目标:实现海量数据的计算。而进行海量计算需要一个稳定的,安全的数据容器,才有了Hadoop分布式文件系统(HDFS,Hadoop Distributed File System)。

HDFS把节点分成两类:NameNode和DataNode。NameNode是唯一的,程序与之通信,然后从DataNode上存取文件。这些操作是透明的,与普通的文件系统API没有区别。

MapReduce则是JobTracker节点为主,分配工作以及负责和用户程序通信。HDFS和MapReduce实现是完全分离的,并不是没有HDFS就不能MapReduce运算。

HDFS就像一个传统的分级文件系统。可以创建、删除、移动或重命名文件等等。但是 HDFS 的架构是基于一组特定的节点构建的,这是由它自身的特点决定的。这些节点包括 NameNode(仅一个),它在 HDFS 内部提供元数据服务;DataNode,它为 HDFS 提供存储块。由于仅存在一个 NameNode,因此这是 HDFS 的一个缺点(单点失败)。存储在 HDFS 中的文件被分成块,然后将这些块复制到多个计算机中(DataNode),块的大小(通常为 64MB)和复制的块数量在创建文件时由客户机决定。NameNode 可以控制所有文件操作,HDFS 内部的所有通信都基于标准的 TCP/IP 协议。

Hadoop实现了一个分布式文件系统HDFS,它有着高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高传输率(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求(requirements)这样可以流的形式访问(streaming access)文件系统中的数据。

下图是Hadoop的体系结构:


Hadoop架构

Hadoop中可以分为两个大的模块,存储模块和计算模块。HDFS作为存储模块,JobTracker、TaskTracker构成计算模块。


1、Hadoop的文件是以HDFS格式存储的

HDFS是一种文件系统,专为大规模分布式数据处理而设计的,我们可以把一个很大的数据集,在HDFS中存储为单个文件。HDFS中采取的是master/slave的结构,其中master我们称为NameNode,slave我们称为DataNode。HDFS中包括以下三个构件:NameNode、DataNode、Secondary NameNode。

NameNode:NameNode位于HDFS的主端,它指导从端的DataNode执行底层的I/O任务,它跟中文件如何被分割成文件块,而这些块又被哪些节点存储,以及分布式文件系统的整体运行状态是否正常。

DataNode:NameNode告知客户端每个数据块驻留在哪个DataNode,客户端直接与DataNode守护进行通讯,来处理与数据块相对应的本地本件,而后,DataNode会与其他DataNode进行通讯,复制这些数据块以实现冗余。

Secondary NameNode:Secondary NameNode是一个用来监控HDFS状态的辅助后台程序。就想NameNode一样,每个集群都有一个Secondary NameNode,并且部署在一个单独的服务器上。Secondary NameNode不同于NameNode,它不接受或者记录任何实时的数据变化,但它会与NameNode进行通信,以便定期地保存HDFS元数据的快照。由于NameNode是单点的,通过Secondary NameNode的快照功能,可以将NameNode的宕机时间和数据损失降低到最小。同时,如果NameNode发生问题,Secondary NameNode可以及时地作为备用NameNode使用。

2、计算模块由JobTracker,TaskTracker组成

JobTracker:JobTracker后台程序用来连接应用程序与Hadoop。用户代码提交到集群以后,由JobTracker决定哪个文件将被处理,并且为不同的task分配节点。同时,它还监控所有的task,一旦某个task失败了,JobTracker就会自动重新开启这个task,在大多数情况下这个task会被放在不用的节点上。每个Hadoop集群只有一个JobTracker,一般运行在集群的Master节点上。

TaskTracker:TaskTracker与负责存储数据的DataNode相结合,其处理结构上也遵循主/从架构。JobTracker位于主节点,统领MapReduce工作;而TaskTrackers位于从节点,独立管理各自的task。每个TaskTracker负责独立执行具体的task,而JobTracker负责分配task。虽然每个从节点仅有一个唯一的一个TaskTracker,但是每个TaskTracker可以产生多个java虚拟机(JVM),用于并行处理多个map以及reduce任务。TaskTracker的一个重要职责就是与JobTracker交互。如果JobTracker无法准时地获取TaskTracker提交的信息,JobTracker就判定TaskTracker已经崩溃,并将任务分配给其他节点处理。

Google的集群系统速览

Google的数据中心使用廉价的Linux PC机组成集群,在上面运行各种应用,即使是分布式开发的新手也可以迅速使用Google的基础设施。核心组件是3个:
1、GFS(Google File System)。一个分布式文件系统,隐藏下层负载均衡,冗余复制等细节,对上层程序提供一个统一的文件系统API接口。Google根据自己的需求对它进行了特别优化,包括:超大文件的访问,读操作比例远超过写操作,PC机极易发生故障造成节点失效等。GFS把文件分成64MB的块,分布在集群的机器上,使用Linux的文件系统存放。同时每块文件至少有3份以上的冗余。中心是一个Master节点,根据文件索引,找寻文件块。详见Google的工程师发布的GFS论文。

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

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

Google的学术论文中包含有:
Google File System(大规模分散文件系统)
MapReduce(大规模分散FrameWork)
BigTable(大规模分散数据库)
Chubby(分散锁服务)

更多了解文章请参阅本站内的:
认识Hadoop
Hadoop生态系统中各组件关系与区别


最新版本:2.6
包含一些新的特性,如通过密钥管理服务器实现 HDFS 透明的加密,重启所有 YARN 守护进程等。例如扩展文件属性和改进 HDFS 的 Web UI,提升 ATS 安全性,更丰富的 YARN REST API 等。在此版本中相关的三个主要片:异构存储在HDFS使用SSD和内存层,支持长时间运行在YARN服务和滚动升级,将升级您的集群软件,然后重新启动升级的节点而无需关闭群集或丢失正在进行的工作。YARN作为其架构中心,Hadoop的不断吸引新的引擎在数据平台中运行,作为组织想要在一个单一的存储库高效地存储数据,并与它同时以不同的方式进行交互。以下是有关的最重要的特征的一些细节。对于功能,改进和bug修复的完整列表,请参阅发行说明

加强支持异构存储层的HDFS
管理员可以在一个限定的Datanode跨磁盘存储层,以及应用程序可利用的API将数据存储到这些不同的存储层。这意味着管理员可以优化他们的应用程序通过使用Hadoop运行:
•在SSD存储层以提高读/写延迟
•内存存储层进行快速读/写要么临时数据或故障的应用程序(如星火,TEZ等)
•归档存储层,以提高存储效率。

支持长时间运行的服务在YARN
Apache Hadoop2.6.0包括增强了核心Apache Hadoop YARN平台,使长期存在的服务(如Apache Storm,Apache Samza,Apache Kafka或Apache HBase),可以在YARN中运行,并充分利用其优势的容错,安全性和易维护性。
Apache Hadoop最初架构,支持批量处理数据。但有些应用“永远在线”,随时准备处理输入数据。例如,Apache  Storm必须准备在一天中的任何时间实时处理数据流,在一年中的任何一天。
用Hadoop2.6.0,集群现在可以利用相同的基础设施安排,执行和管理所有期限的多个工作负载。长住服务,如 Storm和HBase可以和平共处的一起是在特定的时间点(如Apache Hive或Apache Pig),用于特设工作应用程序。

滚动升级在YARN工作,保留重新启动
新的工作,维护重启功能可以让应用程序保持其完成和正在进行的国家,在一个节点故障或重启的脸。 YARN现在可以提供滚动以最小的服务质量下降用于运行应用程序的升级支持。已完成或正在进行中的应用工作节点重启过程中保持不变,进度回升,而不必从头开始重新启动所有任务。


项目主页:http://hadoop.apache.org/