Hadoop 2.0稳定版本2.2.0新特性剖析

于2017-03-29由小牛君创建

分享到:



Hadoop 2.0的第一个稳定版本2.2.0于2013年10月15如发布了,这个版本是 继1.0.0版本后,又一个具有里程碑意义的版本,这意味着Hadoop进入2.0时代。本文尝试解析Hadoop 2.2.0中包含的新特性。

下图是Apache Hadoop官网发布的2.2.0中涉及到的新特性,主要有8个特性,具体如下:

特性1:引入一个新的资源管理系统YARN

YARN是“Yet Another Resource Negotiator”的简称,它是Hadoop 2.0引入的一个全新的通用资源管理系统,可在其之上运行各种应用程序和框架,比如MapReduce、Tez、Storm等,它的引入使得各种应用运行在一个集群中成为可能。YARN是在MRv1基础上衍化而来的,是MapReduce发展到一定程度的必然产物,它的出现使得Hadoop计算类应用进入平台化时代,我的博客中包含大量介绍YARN的文章,有兴趣的读者可阅读:http://dongxicheng.org/category/mapreduce-nextgen/

特性2:HDFS单点故障得以解决

Hadoop 2.2.0同时解决了NameNode单点故障问题和内存受限问题,其中,单点故障是通过主备NameNode切换实现的,这是一种古老的解决服务单点故障的方案,主备NameNode之间通过一个共享存储同步元数据信息,因此共享存储系统的选择称为关键,而Hadoop则提供了NFS、QJM和Bookeeper三种可选的共享存储系统,具体可阅读我的这篇文章:Hadoop 2.0单点故障问题方案总结

特性3:HDFS Federation

前面提到HDFS 的NameNode存在内存受限问题,该问题也在2.2.0版本中得到了解决。这是通过HDFS Federation实现的,它允许一个HDFS集群中存在多个NameNode,每个NameNode分管一部分目录,而不同NameNode之间彼此独立,共享所有DataNode的存储资源,注意,NameNode Federation中的每个NameNode仍存在单点问题,需为每个NameNode提供一个backup以解决单点故障问题。

特性4:HDFS快照

HDFS快照是指HDFS文件系统(或者子系统)在某一时刻的只读镜像,它的出现使得管理员可定时为重要文件或目录做快照,以防止数据误删、丢失等。具体可阅读:Snapshots for HDFS(使用说明),Support for RW/RO snapshots in HDFS

特性5:通过NFSv3访问HDFS

NFS允许用户像访问本地文件系统一样访问远程文件系统,而将NFS引入HDFS后,用户可像读写本地文件一样读写HDFS上的文件,大大简化了HDFS使用,这是通过引入一个NFS gateway服务实现的,该服务能将NFS协议转换为HDFS访问协议,具体如下图所示。有兴趣的读者可阅读:Support NFSv3 interface to HDFS,以及相关设计文档:HDFS NFS Gateway

特性6:支持Windows操作系统

在2.2.0版本之前,Hadoop仅支持Linux操作系统,而Windows仅作为实验平台使用。从2.2.0开始,Hadoop开始支持Windows操作系统,具体可阅读我之前写的一篇文章:Hadoop For Windows

特性7:兼容1.x上运行的MapReduce应用程序

我在文章“浅谈MRv1和MRv2的API兼容性”一文中已经有详细介绍。

特性8:与Hadoop生态系统其他系统进行了充分的集成测试

除了HDFS、MapReduce和YARN这三个核心系统外,Hadoop生态系统还包括Hbase、Hive、Pig等系统,这些系统底层依赖于Hadoop内核,而相比于Hadoop 1.0,Hadoop 2.0的最大变化出现在内核(HDFS、MapReduce和YARN),但与生态系统中其他系统进行集成测试是必需的。

除了以上8个特性外,Apache官方还给出了两个特殊说明:

(1)HDFS变化:HDFS的symlinks(类似于Linux中的软连接)被将移到了2.3.0版本中

(2)YARN/MapReduce注意事项:管理员在NodeManager上设置ShuffleHandler service时,要采用“mapreduce_shuffle”,而非之前的“mapreduce.shuffle”作为属性值(参考:YARN-1229),即:

<property>

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

</property>