前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >EMR入门学习之NameNode HA(十四)

EMR入门学习之NameNode HA(十四)

原创
作者头像
披荆斩棘
发布2019-11-22 19:20:10
7690
发布2019-11-22 19:20:10
举报
文章被收录于专栏:乘风破浪乘风破浪

一、HA的原理和架构

NameNode 保存了整个 HDFS 的元数据信息,一旦 NameNode 挂掉,整个 HDFS 就无法访问。为了提高HDFS的高可用性,在 Hadoop2.0 中,HDFS NameNode支持了高可用架构,如下图。

从上图中,我们可以看出 NameNode 的高可用架构主要分为下面几个部分:

Active NameNode 和 Standby NameNode:两台 NameNode 形成互备,一台处于 Active 状态,为主 NameNode,另外一台处于 Standby 状态,为备 NameNode,只有主 NameNode 才能对外提供读写服务。

主备切换控制器 ZKFailoverController:ZKFailoverController 作为独立的进程运行,对 NameNode 的主备切换进行总体控制。ZKFailoverController 能及时检测到 NameNode 的健康状况,在主 NameNode 故障时借助 Zookeeper 实现自动的主备选举和切换,当然 NameNode 目前也支持不依赖于 Zookeeper 的手动主备切换。

Zookeeper 集群:为主备切换控制器提供主备选举支持。

共享存储系统:共享存储系统是实现 NameNode 的高可用最为关键的部分,共享存储系统保存了 NameNode 在运行过程中所产生的 HDFS 的元数据。主 NameNode 和NameNode 通过共享存储系统实现元数据同步。在进行主备切换的时候,新的主 NameNode 在确认元数据完全同步之后才能继续对外提供服务,主要有JournalNode 。

DataNode 节点:除了通过共享存储系统共享 HDFS 的元数据信息之外,主 NameNode 和备 NameNode 还需要共享 HDFS 的数据块和 DataNode 之间的映射关系。DataNode 会同时向主 NameNode 和备 NameNode 上报数据块的位置信息。

二、故障切换

当Active NN故障时,Zookeeper创建的临时节点ActiveStandbyElectorLock将要被删除,其他NN节点注册的Watcher 来监听到该变化,NN节点的ZKFailoverController 会马上再次进入到创建/hadoop-ha/${dfs.nameservices}/ActiveStandbyElectorLock 节点的流程,如果创建成功,这个本来处于 Standby 状态的 NameNode 就选举为主 NameNode 并随后开始切换为 Active 状态。

新当选的Active NN将确保从QJM(Quorum Journal Manager)同步完所有的元数据文件EditLog文件,然后切换为主节点,并向外提供服务。

备注:

  1. Active NN节点通过QJM组件Standby NN同步EditLog文件。
  2. Standby 节点定时checkpoint生成Fsimage文件,并通过http协议传给Active NN节点。

三、验证Failover

在active master节点上,通过jps命令

找到master进程PID,执行kill -9 $PID,然后hdfs haadmin -getServiceState nn1 如下:

则证明已经切换成standby状态

触发 failover 需要的时间通过ha.zookeeper.session-timeout.ms 配置项,默认为 5 秒。

四、冷备份节点secondarynamenode操作

背景

SecondaryNameNode是namenode的冷备份,而namenode的HA高可用才是namenode的热备份。区别是SecondaryNameNode中存储的元数据不是实时的,滞后于namenode主节点。

NameNode主要是用来保存HDFS的元数据信息,比如命名空间信息,块信息、表名字等。当它运行的时候,这些信息是存在内存中的。但是这些信息也可以持久化到磁盘上。

  • fsimage:它是NameNode启动时对整个文件系统的快照。
  • edits:它是在NameNode启动后,对文件系统的改动序列。

由于NameNode合并FsImage和edits只在启动时,edits日志文件会变得很大在一段时间内并运行在繁忙的集群上 ,一个副作用是一个更大的edits文件会使NameNode在下次重新启动时需要更长的时间

Secondary NameNode定期合并FsImage和edits日志文件,并保持edits日志文件大小在一定限度。

命令介绍

代码语言:javascript
复制
hdfs secondarynamenode [-checkpoint [force]] | [-format] | [-geteditsize]

参数

说明

-checkpoint [force]

检查SecondaryNameNode,如果EditLog的大小超过fs.checkpoint.size,则更新EditLog到fsimage上。 如果使用force参数,则忽略目前EditLog大小,直接更新fsimage

-format

在启动时候,格式化本地存储

-geteditsize

打印Namenode上没有合并入fsimage操作命令条数

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、HA的原理和架构
  • 二、故障切换
    • 备注:
    • 三、验证Failover
    • 四、冷备份节点secondarynamenode操作
      • 背景
        • 命令介绍
        相关产品与服务
        弹性 MapReduce
        弹性 MapReduce (EMR) 是基于云原生技术和泛 Hadoop 生态开源技术的安全、低成本、高可靠的开源大数据平台。提供易于部署及管理的 Hive、Spark、HBase、Flink、StarRocks、Iceberg、Alluxio 等开源大数据组件,帮助客户高效构建云端企业级数据湖技术架构。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档