关于hadoop:Hadoop框架NameNode工作机制详解

37次阅读

共计 3776 个字符,预计需要花费 10 分钟才能阅读完成。

本文源码:GitHub·点这里 || GitEE·点这里

一、存储机制

1、根底形容

NameNode 运行时元数据须要寄存在内存中,同时在磁盘中备份元数据的 fsImage,当元数据有更新或者增加元数据时,批改内存中的元数据会把操作记录追加到 edits 日志文件中,这里不包含查问操作。如果 NameNode 节点产生故障,能够通过 FsImage 和 Edits 的合并,从新把元数据加载到内存中,此时 SecondaryNameNode 专门用于 fsImage 和 edits 的合并。

2、工作流程

NameNode 机制

  • NameNode 格式化启动之后,首次会创立 Fsimage 和 Edits 文件;
  • 非首次启动间接加载 FsImage 镜像文件和 Edits 日志到内存中;
  • 客户端对元数据执行增删改操作会记录到 Edits 文件;
  • 而后申请的相干操作会批改内存中的元数据;

SecondaryNameNode 机制

  • 询问 NameNode 是否须要 CheckPoint,NameNode 返回信息;
  • 如果须要 SecondaryNameNode 申请执行 CheckPoint;
  • NameNode 切割现有日志文件,新记录滚动写入新 Edits 文件;
  • 滚动前的编辑日志和镜像文件拷贝到 SecondaryNameNode;
  • SecondaryNameNode 加载 Edits 日志和 FsImage 镜像文件到内存合并;
  • 生成新的镜像文件 fsimage.chkpoint 后拷贝到 NameNode;
  • NameNode 将 fsimage.chkpoint 重新命名成 fsimage;

3、CheckPoint 设置

通过批改 hdfs-default.xml 文件的相干配置,设置一些 SecondaryNameNode 的机制,例如每隔一小时执行一次。

<property>
  <name>dfs.namenode.checkpoint.period</name>
  <value>3600</value>
</property>
<property>
  <name>dfs.namenode.checkpoint.txns</name>
  <value>1000000</value>
<description> 文件满 1000000 记录数 </description>
</property>
<property>
  <name>dfs.namenode.checkpoint.check.period</name>
  <value>60</value>
<description> 1 分钟查看一次文件记录数 </description>
</property >

二、文件信息

1、FsImage 文件

NameNode 内存中元数据序列化备份信息;

生成门路 :基于 NameNode 节点

cd /opt/hadoop2.7/data/tmp/dfs/name/current/

查看文件

# 根本语法
hdfs oiv -p 转换文件类型 -i 镜像文件 -o 转换后文件输入门路 

基于语法格局,操作上图中的文件:

# 转换文件
hdfs oiv -p XML -i fsimage_0000000000000000019 -o /data/fsimage.xml
# 查看
cat /data/fsimage.xml

这样就能够看到一些元数据的信息。

2、Edits 文件

寄存 HDFS 文件的所有增删改操作的门路,会记录在 Edits 文件中。

根本语法

hdfs oev -p 转换文件类型 -i 日志文件 -o 转换后文件输入门路 

查看文件

# 转换文件
hdfs oev -p XML -i edits_0000000000000000020-0000000000000000020 -o /data/edits.xml
# 查看
cat /data/edits.xml

三、故障复原

1、拷贝 SecondaryNameNode 数据

首先完结 NameNode 过程;

删除 NameNode 存储的数据;

[root@hop01 /] rm -rf /opt/hadoop2.7/data/tmp/dfs/name/*

拷贝 SecondaryNameNode 中数据到 NameNode 数据存储目录下;

# 留神 SecondaryNameNode 服务配置在 hop03 上
[root@hop01 /] scp -r root@hop03:/opt/hadoop2.7/data/tmp/dfs/namesecondary/* /opt/hadoop2.7/data/tmp/dfs/name/

重新启动 NameNode 过程;

2、基于 Checkpoint 机制

批改 hdfs-site.xml 配置,同步到集群相干服务下,重启 HDFS 过程;

<property>
  <name>dfs.namenode.checkpoint.period</name>
  <value>120</value>
</property>
<property>
  <name>dfs.namenode.name.dir</name>
  <value>/opt/hadoop2.7/data/tmp/dfs/name</value>
</property>

完结 NameNode 过程;

删除 NameNode 存储的数据;

[root@hop01 /] rm -rf /opt/hadoop2.7/data/tmp/dfs/name/*

因为集群中 SecondaryNameNode(在 hop03) 不和 NameNode(在 hop01) 在一个主机节点上,须要将 SecondaryNameNode 存储数据的目录拷贝到 NameNode 存储数据的平级目录,并删除 in_use.lock 文件;

[root@hop01 /]scp -r root@hop03:/opt/hadoop2.7/data/tmp/dfs/namesecondary /opt/hadoop2.7/data/tmp/dfs/
[root@hop01 namesecondary/] rm -rf in_use.lock
[root@hop01 dfs]$ ls
data  name  namesecondary

导入检查点数据

[root@hop01 hadoop2.7] bin/hdfs namenode -importCheckpoint

重新启动 NameNode

[root@hop01 hadoop2.7] sbin/hadoop-daemon.sh start namenode

四、多个目录配置

NameNode 能够配置多本地目录,每个目录寄存内容雷同,减少运行的可靠性;

1、增加配置

# vim /opt/hadoop2.7/etc/hadoop/hdfs-site.xml
# 增加内容如下
<property>
    <name>dfs.namenode.name.dir</name>
    <value>file:///${hadoop.tmp.dir}/dfs/name01,file:///${hadoop.tmp.dir}/dfs/name02</value>
</property>

该配置须要同步集群下所有服务;

2、删除原有数据

集群下所有服务都须要执行该操作;

[root@hop01 hadoop2.7]# rm -rf data/ logs/

格式化 NameNode 之后重启集群服务。

五、平安模式

1、根本形容

NameNode 刚启动时,会基于镜像文件和编辑日志在内存中加载文件系统元数据的映像,而后开始监听 DataNode 申请,该过程期间处于一个只读的平安模式下,客户端无奈上传文件,在该平安模式下 DataNode 会发送最新的数据块列表信息到 NameNode,如果满足最小正本条件,NameNode 在指定工夫后就会退出平安模式。

2、平安模式

  • 平安模式状态
/opt/hadoop2.7/bin/hdfs dfsadmin -safemode get
  • 进入平安模式
/opt/hadoop2.7/bin/hdfs dfsadmin -safemode enter
  • 退出平安模式
/opt/hadoop2.7/bin/hdfs dfsadmin -safemode leave
  • 期待平安模式
/opt/hadoop2.7/bin/hdfs dfsadmin -safemode wait

六、源代码地址

GitHub·地址
https://github.com/cicadasmile/big-data-parent
GitEE·地址
https://gitee.com/cicadasmile/big-data-parent

举荐浏览:编程体系整顿

序号 项目名称 GitHub 地址 GitEE 地址 举荐指数
01 Java 形容设计模式, 算法, 数据结构 GitHub·点这里 GitEE·点这里 ☆☆☆☆☆
02 Java 根底、并发、面向对象、Web 开发 GitHub·点这里 GitEE·点这里 ☆☆☆☆
03 SpringCloud 微服务根底组件案例详解 GitHub·点这里 GitEE·点这里 ☆☆☆
04 SpringCloud 微服务架构实战综合案例 GitHub·点这里 GitEE·点这里 ☆☆☆☆☆
05 SpringBoot 框架根底利用入门到进阶 GitHub·点这里 GitEE·点这里 ☆☆☆☆
06 SpringBoot 框架整合开发罕用中间件 GitHub·点这里 GitEE·点这里 ☆☆☆☆☆
07 数据管理、分布式、架构设计根底案例 GitHub·点这里 GitEE·点这里 ☆☆☆☆☆
08 大数据系列、存储、组件、计算等框架 GitHub·点这里 GitEE·点这里 ☆☆☆☆☆

正文完
 0