整套大数据学习资料(视频+笔记)百度网盘无门槛下载:http://www.edu360.cn/news/content?id=3377

3.2.4. HDFS的高可用性

hadoop 花牛 7℃ 0评论

通过联合使用在多个文件系统中备份namenode的元数据和通过备用 namenode创建监测点能防止数据丢失,但是依旧无法实现文件系统的髙可用性。Namenode依旧存在单点失效(SPOF)的问题。如果namenode失效了,那么所有的客户端——包括MapReduce作业——均无法读、写或列 (list)文件,因为namenode是唯一存储元数据与文件到数据块映射的地方。 在这一情况下,Hadoop系统无法提供服务直到有新的namenode上线。

在这样的情况下,要想从一个失效的namenode恢复,系统管理员得启动一个拥有文件系统元数据副本的新的namenode,并配置datanode和客户端以便使用这个新的namenode。新的namenode直到满足以下情形才能响应服务:1)将命名空间的映像导入内存中;2)重做编辑日志;3)接收到足够多的 来自datanode的数据块报告并退出安全模式。对于一个大型并拥有大量文 件和数据块的集群,namenode的冷启动需要30分钟,甚至更长时间。

系统恢复时间太长,也会影响到日常维护。事实上,namenode失效的可能性非常低,所以在实际应用中计划系统失效时间就显得尤为重要。

Hadoop的2.x发行版本系列针对上述问题在HDFS中增加了对高可用性 (HA)的支持。在这一实现中,配置了一对活动-备用(active-standby) namenode。当活动namenode失效,备用namenode就会接管它的任务并开 始服务于来自客户端的请求,不会有任何明显中断。实现这一目标需要在架构上做如下修改。

  • namenode之间需要通过高可用的共享存储实现编辑日志的共享。

(在早期的高可用实现版本中,需要一个NFS过滤器来辅助实现,但是在后期版本中将提供更多的选择,比如构建于ZooKeeper之上 的BookKeeper这样的系统。)当备用namenode接管工作之后,它 将通读共享编辑日志直至末尾,以实现与活动namenode的状态同

  • datanode需要同时向两个namenode发送数据块处理报告,因为数 据块的映射信息存储在namenode的内存中,而非磁盘。

  • 客户端需要使用特定的机制来处理namenode的失效问题,这一机 制对用户是透明的。

 

在活动namenode失效之后,备用namenode能够快速(几十秒的时间)实现 任务接管,因为最新的状态存储在内存中:包括最新的编辑日志条目和最 新的数据块映射信息。实际观察到的失效时间略长一点(需要1分钟左右), 这是因为系统需要保守确定活动namenode是否真的失效了。

在活动namenode失效且备用namenode也失效的情况下,当然这类情况发 生的槪率非常低,管理员依旧可以申明一个备用namenode并实现冷启动。 这类情况并不会比非高可用(no-HA)的情况更差,并且从操作的角度讲这是 一个进步,因为上述处理已是一个标准的处理过程并植入Hadoop中。

 

故障切换与规避

一个称为故障转移控制器(failover_controller)的系统中有一个新实体管理着将活动namenode转移为备用namenode的转换过程。故障转移控制器是可插拔的,但其最初的实现是基于ZooKeeper的并由此确保有且仅有-个活 动namenode。每一个namenode运行着一个轻量级的故障转移控制器,其 工作就是监视宿主namenode是否失效(通过一个简单的心跳机制实现)并在 namenode失效时进行故障切换。

管理员也可以手动发起故障转移,例如在进行日常维护时。这称为“平稳 的故障转移”,因为故障转移控制器可以组织两个namenode有序切换 角色。

但在非平稳故障转移的情况下,无法确切知道失效namenode是否已经停止 运行。例如,在网速非常慢或者网络被分割的情况下,同样也可能激发故 障转移,但是先前的活动namenode依然运行着并且依旧是活动 namenode。高可用实现做了更进一步的优化,以确保先前活动的namenode 不会执行危害系统并导致系统崩溃的操作——该方法称为“规避” (fencing)。系统引入了一系列的规避机制,包括杀死namenode进程,收回 访问共享存储目录的权限(通常使用供应商指定的NFS命令),通过远程管理命令以屏蔽相应网络端口。诉诸的最后手段是,先前活动namenode可以 通过一个相当形象的称为STONITH(shoot the other node in the head)的技,术 进行规避,该方法主要通过一个特定的供电单元对相应主机进行断电操作:

客户端的故障切换通过客户端类库实现透明处理。最简单的实现是通过客 户端的配置文件实现故障切换的控制。HDFSURI使用一个逻辑主机名,该 主机名映射到一对namenode地址(在配置文件中设置),客户端类库会访问 每一个namenode地址直至处理完成。

3.

转载请注明:全栈大数据 » 3.2.4. HDFS的高可用性

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址