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