作为安装Hadoop的第一步,就是根据实际情况选择最合适的Hadoop版本。而目前由于Hadoop的飞速发展,功能更新和错误修复在不断地迭代着,所以Hadoop的版本非常多,显得有些杂乱。对于初学者来说,选择一个合适的Hadoop版本进行学习非常重要,本节主要理清各个Hadoop版本之间的关系与不同。
Hadoop目前是Apache软件基金会的顶级项目,目前由Apache软件基金负责开发和推广,所以我们可以直接从Apache软件基金会的镜像网站上下载Hadoop,其链接为 http://apache.dataguru.cn/hadoop/core/ 。Apache Hadoop以压缩包(tarball、tar.gz)的形式发布,其中包括了源代码和二进制工作文件。
在第1章中曾经提到过,Cloudera是一家提供Hadoop支持、咨询和管理工具的公司,在Hadoop生态圈具有举足轻重的地位,它的拳头产品就是著名的Cloudera’s Distribution for Hadoop,简称CDH。该软件同Apache Hadoop一样,都是完全开源的,基于Apache软件许可证,免费为个人和商业使用。Cloudera从一个稳定的Apache Hadoop的版本开始,连续不断地发布新版本并为旧版本打上补丁,为各种不同的生产环境提供安装文件,在Cloudera的团队中,有许多Apache Hadoop的贡献者,所以Cloudera公司的实力毋庸置疑。
用户一般安装Hadoop时,不仅只安装HDFS、MapReduce,还会根据需要安装Hive、HBase、Sqoop等。Cloudera将这些相关项目都集成在一个CDH的版本里,目前CDH包括Hadoop、HBase、Hive、Pig、Sqoop、Flume、Zookeeper、Oozie、Mahout和Hue等,几乎完整覆盖了整个Hadoop的生态圈。这样做的好处是保证了组件之间的兼容性,因为这些各个项目之间也存在完全独立的版本,其各个版本与Hadoop之间必然会存在兼容性的问题。如果你选择了CDH,那么同一个CDH版本的组件之间将完全不存在兼容性问题。
在编写本书时,CDH最新的版本是CDH5,也是目前最主流的版本,它是基于Apache Hadoop 2.6。CDH还有两个正式的大版本:CDH3和CDH4(CDH1和CDH2现在早已绝迹,Cloudera公司也早已放弃支持),其中CDH3是一个非常经典的版本,它是基于Apache Hadoop 0.20.2的,这是CDH第一个真正意义上的稳定版,久经生产环境考验,而CDH4是CDH5的过渡版,没有真正意义上流行过。
CDH也会以压缩包的形式发布,可以在其官网下载,CDH还提供Yum、Apt、Zypper形式的安装。
对于任何一个Apache项目,所有的基础特性均被添加到一个称为“trunk”的主代码线(main code line),Hadoop也不例外。当需要开发某个重要的特性时,会专门从主代码线中延伸出一个分支(branch),这被称为一个候选发布版(candidate release)。该分支将专注于开发该特性而不再添加其他新的特性,待基本bug修复之后,经过相关人士投票便会对外公开成为发布版(release version),并将该特性合并到主代码线中。需要注意的是,多个分支可能会同时进行研发,这样,版本高的分支可能先于版本低的分支发布。
目前Hadoop的版本有如下几个特性 [4] 。
(1)Append:HDFS Append支持对文件追加,HDFS在设计之初的理念是“一次写入,多次读取”,但由于某些具有写需求的应用使用HDFS作为底层存储系统,如HBase的预写日志(WAL),所以HDFS加入了这一功能。
(2)Security:Hadoop缺乏自己的安全机制,该功能可以为Hadoop增加基于Kerberos和Deletion Token的安全机制。
(3)Symlink:使HDFS支持符号链接,符号链接又叫软链接,是一类特殊的文件 ,这个文件包含了另一个文件的路径名(绝对路径 或者相对路径 ),在对符号文件 进行读操作或写操作时,系统会自动把该操作转换为对源文件 的操作,但删除链接文件时,系统仅仅删除链接文件,而不删除源文件本身。
(4)MRv1:第一代MapReduce计算框架,通过MapReduce思想,将问题转化为Map和Reduce两个阶段,基础服务由JobTracker、TaskTracker进程提供。
(5)YARN/MRv2:第一代MapReduce计算框架具有扩展性和多计算框架支持不足的缺点,针对这些,提出了全新的资源管理框架(Yet Another Resource Negotiator),通过这个组件,我们可以在共用底层存储(HDFS)的情况下,计算框架采取可插拔式的配置。在MRv1中的JobTracker的资源管理和作业跟踪的功能被分拆由ResourceManager和ApplicationMaster两个组件来完成,增强了扩展性。
(6)NameNode Federation:在Hadoop中,NameNode保存了所有文件的元数据,所以其性能制约了整个HDFS集群的扩展。基于此,NameNode Federation将NameNode横向扩展,每一个NameNode保存一部分元数据,即将元数据水平切分,彼此之间互相隔离,但共享底层的DataNode存储。
(7)NameNode HA:在Hadoop中,NameNode还存在单点故障问题,当NameNode出现故障时,集群必须停止工作。NameNode采取共享存储的方案解决NameNode的高可用性问题。
基于以上Hadoop的特性衍生出的Hadoop版本令人眼花缭乱,这也是由于功能更新和错误修复在不断进行中。图2-1所示为Hadoop不同的版本分支。
图2-1 Hadoop的分支
(1)0.20.0~0.20.2:Hadoop的0.20分支非常稳定,虽然看起来有些落后,但是经过生产环境考验,是Hadoop历史上生命周期最长的一个分支,CDH3、CDH4虽然包含了0.21和0.22分支的新功能和补丁,但都是基于此分支。
(2)0.20-append:0.20-append支持HDFS追加,由于该功能被认为是一个不稳定的潜在因素,所以它被单独新开了一个分支,并且没有任何新的Hadoop的正式版基于此分支发布。
(3)0.20-security:该分支基于0.20并支持Kerberos认证。
(4)0.20.203~0.20.205:这些版本包括了Security分支所带功能,并且还包括错误修复和0.20分支的线上开发的改进。
(5)0.21.0:0.21是一个预研性质的版本,目的是强调那段时间开发的一些新功能,没有Security功能,但有Append功能,不建议部署在生产环境。
(6)0.22.0:0.22.0包括HDFS的安全功能,并且更新不大。
(7)0.23.0:在2011年11月,Hadoop 0.23发布了,包括了Append、Security、YARN和HDFS Federation功能,该版本被认为是2.0.0的预览版本。
(8)1.0.0:1.0.0版本是基于0.20.205版本发布,包括了Security功能,是一个值得部署的稳定版本。但是从上面可以看出,1.0.0并不是包含了所有分支。
(9)2.0.0:2012年5月,基于0.23.0分支的2.0.0版本发布,它包含了YARN,但移除了MRv1,兼容了MRv1的API,但底层实现有明显不同,需要经过大量测试才能被用于生产环境。CDH4是基于此版本,但CDH4还提供了MRv1的实现。
在本书第1版问世的时候,Hadoop的版本还比较乱,各种分支、新特性各自为政,现在已经由CDH5统一了局面,目前国内大多采用Cloudera的CDH5作为生产环境的Hadoop版本,但每个版本各自的特性和功能还是有必要提一下的,如表2-1所示。
表2-1 Hadoop各版本具有的功能
选择Hadoop的版本取决于用户想要的功能和是否稳定,对于稳定的需求,一般就考虑Cloudera的CDH。CDH有很多的补丁和更新,稳定性很不错。对于功能的需求,CDH几乎包含了整个Hadoop生态圈,能够很好地为业务提供支持。CDH5是目前最稳定也是功能最全的CDH版本。
CDH5还包括了Hive、HBase、Sqoop等的CDH版,具体版本号如表2-2所示。表2-2的第二列前面的数字是社区版版本号,后面的数字是CDH的版本号。
表2-2 CDH5组件列表与版本说明