hadoop 2 背景
在Hadoop 2.0.0之前,NameNode是HDFS集群中的单点故障(SPOF)。每个集群都有一个NameNode,如果该机器或进程变得不可用,则整个集群将不可用,直到NameNode重新启动或在单独的计算机上启动。
这两个方面影响了HDFS集群的总体可用性:
在计算机事件(如机器崩溃)的情况下,集群将不可用,直到操作员重新启动NameNode。
NameNode机器上的计划维护事件(如软件或硬件升级)将导致集群停机的窗口。
HDFS高可用性功能通过提供在具有热备用的主动/被动配置中的同一集群中运行两个冗余名称节点的选项来解决上述问题。这允许在机器崩溃的情况下快速故障切换到新的NameNode,或者为了计划维护而对管理员启动的优化转换进行了优雅。
hadoop1 vs hadoop2
从Hadoop整体框架来说
Hadoop1.0即第一代Hadoop,由分布式存储系统HDFS和分布式计算框架MapReduce组成,
其中HDFS由一个NameNode和多个DateNode组成,MapReduce由一个JobTracker和多个TaskTracker组成。
Hadoop2.0即第二代Hadoop为克服Hadoop1.0中的不足:
针对Hadoop1.0单NameNode制约HDFS的扩展性问题,提出HDFS Federation,
它让多个NameNode分管不同的目录进而实现访问隔离和横向扩展,同时彻底解决了NameNode单点故障问题;
针对Hadoop1.0中的MapReduce在扩展性和多框架支持等方面的不足,它将JobTracker中的资源管理和作业控制分开,
分别由ResourceManager(负责所有应用程序的资源分配)和ApplicationMaster(负责管理一个应用程序)实现,
即引入了资源管理框架Yarn。
同时Yarn作为Hadoop2.0中的资源管理系统,
它是一个通用的资源管理模块,
可为各类应用程序进行资源管理和调度,
不仅限于MapReduce一种框架,也可以为其他框架使用,如Tez、Spark、Storm等
从MapReduce计算框架来讲
MapReduce1.0计算框架主要由三部分组成:编程模型、数据处理引擎和运行时环境。
它的基本编程模型是将问题抽象成Map和Reduce两个阶段,其中Map阶段将输入的数据解析成key/value,
迭代调用map()函数处理后,再以key/value的形式输出到本地目录,
Reduce阶段将key相同的value进行规约处理,并将最终结果写到HDFS上;
它的数据处理引擎由MapTask和ReduceTask组成,分别负责Map阶段逻辑和Reduce阶段的逻辑处理;
它的运行时环境由一个JobTracker和若干个TaskTracker两类服务组成,
其中JobTracker负责资源管理和所有作业的控制,
TaskTracker负责接收来自JobTracker的命令并执行它。
MapReducer2.0具有与MRv1相同的编程模型和数据处理引擎,唯一不同的是运行时环境。
MRv2是在MRv1基础上经加工之后,运行于资源管理框架Yarn之上的计算框架MapReduce。
它的运行时环境不再由JobTracker和TaskTracker等服务组成,
而是变为通用资源管理系统Yarn和作业控制进程ApplicationMaster,
其中Yarn负责资源管理的调度而ApplicationMaster负责作业的管理。