Hadoop的容错性

要谈及Hadoop的容错性,就不得不先从Hadoop的组成说起。Hadoop的1版本可以理解为是由MapReduce离线处理框架和HDFS文件系统组成。而Hadoop的2版本在1的基础上,增加了YARN资源管理系统。因为我自己接触2的时间不长,今天就针对前两个来谈Hadoop的容错性。

一、MapReduce的容错性:

1, map或reduce运行时因代码原因而抛出的异常。在这种情况下,子进程JVM会在进程退出前向TaskTracker父进程发送错误报告。在日志中记录该错误。

2, TaskTracker失败:有TaskTracker运行缓慢或崩溃而导致无法向JobTracker发送心跳,JobTracker会将该TaskTracker从任务调度池中移除,并重新调度该任务。

3, JobTracker失败:这种失败发生的概率很小;但一旦发生导致的后果最为严重,因此通过Zookeeper协调机制来降低这种问题发生的概率。

总结:

JobTracker 对应于 NameNode

TaskTracker 对应于 DataNode

NameNode和DataNode是只对数据存放而言的

JobTracker和TaskTracker是对应于MapReduce执行而言

二、HDFS的容错性

首先简要介绍HDFS的一些基本组成:

HDFS有两种节点类型:NameNode和DataNode,以master/slaver模式运行。

NameNode:管理文件系统的命名空间。维护整个文件系统树和这个树内的所有文件和索引目录(所有信息以两种方式持久化保存在本地磁盘:命名空间镜像和编辑日志)。如果丢失NameNode,整个文件系统将无法使用,因为无法知道如果通过数据节点重建文件。NameNode记录着每个文件中各个块所在数据节点的位置信息,但不会持久化存储这些信息,因为这些信息在DataNode启动的时候会从DataNode中重建。

DataNode:保存Block(即:负责把HDFS数据库写在本地文件系统),每个Block对应一个NameNode信息文件;启动DataNode时,会向NameNode汇报Block信息;定期发送心跳给NameNode,实现通信。

SecondNameNode:监控HDFS状态的辅助后台程序。类似于NameNode,每个集群都有一个SecondNameNode,且单独部署在一个单独的服务器上。与同于NameNode的时,SecondNameNode不接受/记录任何实时数据变化。但是会周期性的将EditsLog文件中记录对HDFS的操作合并到一个FsImage文件,然后清空EditsLog文件。当NameNode重启时就会加载该FsImage文件。

SecondNameNode的作用:(1)如果没有SecondNameNode,NameNode的每次启动则会花费太长的时间。周期性的合并能减少重启时花费的时间。(2)可以将应为NameNode宕机而造成的数据丢失的风险尽可能降低(因为SecondNodeName合并是周期性的,所以难免会丢失一些最新的数据信息)。

HDFS容错性:

NameNode容错性:

a) SecondeNameNode可以解决NameNode单点失败的情况。但是该方法存在以下三点问题:1)必须通过人工的方式寻找并拷贝SecondNameNode中的镜像文件,手动开启NameNode,无法自动化完成。2)NameNode失败期间,任何人无法以任何形式访问、操作HDFS中的文件。3)SecondNameNode的镜像文件保存有时间差,恢复时会存在数据丢失。

b)通过Zookeeper实现NameNode备份。在HDFS系统中配置多个NameNode,并向Zookeeper注册自己的存在。即可通过Zookeeper的Watch和Dispatch实现各NameNode之间的协同。

DataNode容错性:DataNode是以数据块作为容错单元,默认情况下,每个数据块会被备份在三分,分别存在不同的DataNode上。当一个数据块访问失效,则会从备份的DataNode中选取一个,并备份该数据块,以保证数据块的最低备份标准。

猜你喜欢

转载自blog.csdn.net/yhyr_ycy/article/details/52524035