Hadoop 1.0 (0.20.2×) 终于在27 December, 2011正式发布了【1】。下面是一个Hadoop的简单历史【2】:
这个也是目前最稳定的版本。新的版本也在开发之中,那就是0.23或者2.0吧!在新版本中引入了很多新的特性,其中着重说一个:
- HDFS Federation
- NextGen MapReduce
HDFS Federation
目前的HDFS包含两层:- 命名空间 (Namespace)
- Consists of directories, files and blocks
- It supports all the namespace related file system operations such as create, delete, modify and list files and directories.
- 块存储服务 (Block Storage Service) has two parts
- Block Management (which is done in Namenode)
- Provides datanode cluster membership by handling registrations, and periodic heart beats.
- Processes block reports and maintains location of blocks.
- Supports block related operations such as create, delete, modify and get block location.
- Manages replica placement and replication of a block for under replicated blocks and deletes blocks that are over replicated.
- Storage - is provided by datanodes by storing blocks on the local file system and allows read/write access.
- Block Management (which is done in Namenode)
这个设计的最大问题就是可以很容易的通过增加Datanode来水平拓展物理存储空间,但是却只能有一个Namenode。这个导致很明显的问题就是single point of failure很性能瓶颈。
新的设计试图解决了这个问题:
其实这个我们也可以想到,呵呵!这里引入了一个新概念:Block Pool。它是一个block的集合,显然里面的block可以来自不同的Datanode。每个pool独立运作,只属于一个Namenode。
Apache Hadoop NextGen MapReduce (YARN)
新的版本叫做MapReduce 2.0 (MRv2) 或者 YARN。MRv2的核心是将JonTracker里面的两个主要功能,资源管理(resource management)和任务调度/监控(job scheduling/monitoring),分解为两个独立的守护进程(daemon):global ResourceManager (RM) 和 per-application ApplicationMaster (AM)。一个程序可以是以前的Map-Reduce任务或者是一个任务的有向无环图(Directed Acyclic Graph)。ResourceManager有两个主要构成:Scheduler和ApplicationsManager。Scheduler负责分配资源,它只是一个纯粹的调度者,并不会监控任务的执行。资源调度基于Container,它是memory, cpu, disk, network等的抽象,目前只支持memory。ApplicationsManager负责接收任务提交,协商第一个Container以执行程序的ApplicationMaster和重启失败的ApplicationMaster container。
NodeManager是每台机器上的代理(per-machine framework agent),对container负责,提供对资源使用的监控和向ResourceManager/Scheduler提供汇报。
每个程序的ApplicationMaster负责协商资源,监控程序的执行和进度。
上图我们可以看到一个ApplicationMaster其实可以使用其它机器上的资源(Container),这个对于就可以提供更高的资源利用和并发执行了。
题外话,最后介绍一个hadoop 1.0里面的新的特性:WebHDFS。这个就是HDFS的HTTP REST API。这个的好处显而易见,无需hadoop环境就可以直接访问HDFS。是不是很容易实现跨data center的数据访问呢?
参考:
【1】http://hadoop.apache.org/common/docs/r1.0.0/releasenotes.html
【2】http://hortonworks.com/apache-hadoop-is-here/
【3】http://hadoop.apache.org/common/docs/r0.23.0/index.html
【4】http://hadoop.apache.org/common/docs/r1.0.0/webhdfs.html