2.1.2 Apache Hadoop新版本的特性
当前Apache Hadoop版本非常多,本小节将帮助读者梳理各个版本的特性以及它们之间的联系。在讲解Hadoop各版本之前,先要了解Apache软件发布方式。对于任何一个Apache开源项目,所有的基础特性均被添加到一个称为“trunk”的主代码线(main codeline)。当需要开发某个重要的特性时,会专门从主代码线中延伸出一个分支(branch),这被称为一个候选发布版(candidate release)。该分支将专注于开发该特性而不再添加其他新的特性,待基本bug修复之后,经过相关人士投票便会对外公开成为发布版(release version),并将该特性合并到主代码线中。需要注意的是,多个分支可能会同时进行研发,这样,版本高的分支可能先于版本低的分支发布。
由于Apache以特性为准延伸新的分支,故在介绍Apache Hadoop版本之前,先介绍几个独立产生的Apache Hadoop新版本的重大特性:
❑Append[1]:HDFS Append主要完成追加文件内容的功能,也就是允许用户以append方式修改HDFS上的文件。HDFS最初的一个设计目标是支持MapReduce编程模型,而该模型只需要写一次文件,之后仅进行读操作而不会对其修改,即“write-once-read-many”,这就不需要支持文件追加功能。但随着HDFS变得流行,一些具有写需求的应用想以HDFS作为存储系统,比如,有些应用程序需要往HDFS上某个文件中追加日志信息,HBase需使用HDFS具有的append功能以防止数据丢失[2]等。
❑HDFS RAID[3]:Hadoop RAID模块在HDFS之上构建了一个新的分布式文件系统:Distributed Raid FileSystem(DRFS)。该系统采用了Erasure Codes增强对数据的保护。有了这样的保护,可以采用更少的副本数来保持同样的可用性保障,进而为用户节省大量存储空间。
❑Symlink[4]:让HDFS支持符号链接。符号链接是一种特殊的文件,它以绝对或者相对路径的形式指向另外一个文件或者目录(目标文件)。当程序向符号链接中写数据时,相当于直接向目标文件中写数据。
❑Security[5]:Hadoop的HDFS和MapReduce均缺乏相应的安全机制,比如在HDFS中,用户只要知道某个block的blockID,便可以绕过NameNode直接从DataNode上读取该block,用户可以向任意DataNode上写block;在MapReduce中,用户可以修改或者删掉任意其他用户的作业等。为了增强Hadoop的安全机制,从2009年起,Apache专门组成一个团队,为Hadoop增加基于Kerberos和Deletion Token的安全认证和授权机制。
❑MRv1:第一代MapReduce计算框架。它由两部分组成:编程模型(programmingmodel)和运行时环境(runtime environment)。它的基本编程模型是将问题抽象成Map和Reduce两个阶段。其中,Map阶段将输入数据解析成key/value,迭代调用map()函数处理后,再以key/value的形式输出到本地目录;Reduce阶段则将key相同的value进行规约处理,并将最终结果写到HDFS上。它的运行时环境由两类服务组成:JobTracker和TaskTracker,其中,JobTracker负责资源管理和所有作业的控制,而TaskTracker负责接收来自JobTracker的命令并执行它。
❑YARN/MRv2:针对MRv1中的MapReduce在扩展性和多框架支持方面的不足,提出了全新的资源管理框架YARN(Yet Another Resource Negotiator)。它将JobTracker中的资源管理和作业控制功能分开,分别由两个不同进程ResourceManager和ApplicationMaster实现。其中,ResourceManager负责所有应用程序的资源分配,而ApplicationMaster仅负责管理一个应用程序。
❑NameNode Federation[6]:针对Hadoop 1.0中NameNode内存约束限制其扩展性问题提出的改进方案。它将NameNode横向扩展成多个,其中,每个NameNode分管一部分目录。这不仅增强了HDFS扩展性,也使HDFS NameNode具备了隔离性。
❑NameNode HA[7]:HDFS NameNode存在两个问题,即NameNode内存约束限制扩展性和单点故障。其中,第一个问题通过NameNode Federation方案解决,而第二个问题则通过NameNode热备方案(即NameNode HA)实现。
[1]0.20-append:https://issues.apache.org/jira/browse/HDFS-200,0.21.0-append:https://issues.apache.org/jira/browse/HDFS-265
[2]http://hbase. apache.org/book/hadoop.html
[3]http://wiki. apache.org/hadoop/HDFS-RAID与https://issues.apache.org/jira/browse/HDFS-503
[4]https://issues. apache.org/jira/browse/HDFS-245
[5]https://issues. apache.org/jira/browse/HADOOP-4487
[6]https://issues. apache.org/jira/browse/HDFS-1052
[7]https://issues. apache.org/jira/browse/HDFS-1623