NameNode工作机制

1.NameNode与Secondary NameNode的工作机制

NameNode工作机制_第1张图片

[1].第一阶段:namenode 启动

①.第一次启动 namenode 格式化后,创建 fsimage 和 edits 文件。如果不是第一次启

动,直接加载编辑日志和镜像文件到内存。

②.客户端对元数据进行增删改的请求。

③.namenode 记录操作日志,更新滚动日志。

④.namenode 在内存中对数据进行增删改查。

[2].第二阶段:Secondary NameNode 工作

①.Secondary NameNode 询问 namenode 是否需要 checkpoint。直接带回 namenode 是否检查结果。

②.Secondary NameNode 请求执行 checkpoint。

③namenode 滚动正在写的 edits 日志。

④.将滚动前的编辑日志和镜像文件拷贝到 Secondary NameNode。

⑤.Secondary NameNode 加载编辑日志和镜像文件到内存,并合并。

⑥.生成新的镜像文件 fsimage.chkpoint。

⑦.拷贝 fsimage.chkpoint 到 namenode。

⑧.namenode 将 fsimage.chkpoint 重新命名成 fsimage。

2.镜像文件和编辑日志文件

[1].namenode 被格式化之后,将在/opt/module/hadoop-2.7.2/data/tmp/dfs/name/current 目录中产生如下类型若干文件

edits_0000000000000000000

fsimage_0000000000000000000.md5

seen_txid

VERSION

NameNode工作机制_第2张图片

①Fsimage 文件:HDFS 文件系统元数据的一个永久性的检查点,其中包含 HDFS文件系统的所有目录和文件 idnode 的序列化信息。

②Edits 文件:存放 HDFS 文件系统的所有更新操作的路径,文件系统客户端执行的所有写操作首先会被记录到 edits 文件中。

③.seen_txid 文件保存的是一个数字,就是最后一个 edits_的数字

④.每次 Namenode 启动的时候都会将 fsimage 文件读入内存,并从 00001 开始到 seen_txid 中记录的数字依次执行每个 edits 里面的更新操作,保证内存中的元数据信息是最新的、同步的,可以看成 Namenode 启动的时候就将 fsimage 和 edits 文件进行了合并。

[2].其中edits文件和fsimage文件不能直接查看,其内容是序列化后的内容,只能用oiv和oev查看其内容

①.oiv apply the offline fsimage viewer to an fsimage

②.oev apply the offline edits viewer to an edits file

③.用法:hdfs oiv/oev -p 文件类型 -i 镜像文件 -o 转换后文件输出路径

[3].查看fsimage文件

①.生成xml:hdfs oiv -p XML -i fsimage_0000000000000000120 -o ./fsimage.xml

②.查看





     

          1000

          1014

          0

          1073741838

          120

     

     

          16403

          

              16385

              DIRECTORY

              

              1547866929490

              w4xj:supergroup:rwxr-xr-x

              9223372036854775807

              -1

          

          

              16386

              DIRECTORY

              user

              1547866455990

              w4xj:supergroup:rwxr-xr-x

              -1

              -1

          

          

              16387

              DIRECTORY

              w4xj

              1547869196317

              w4xj:supergroup:rwxr-xr-x

              -1

              -1

          

          

              16388

              DIRECTORY

              input

              1547197140869

              w4xj:supergroup:rwxr-xr-x

              -1

              -1

          

          

              16389

              FILE

              wc.input

              3

              1547196366747

              1547345873892

              134217728

              w4xj:supergroup:rw-r--r--

              

                   

                        1073741825

                        1001

                        37

                   

              

          

          

              16390

              FILE

              hadoop-2.7.2.tar.gz

              3

              1547197140863

              1547954488776

              134217728

              w4xj:supergroup:rw-r--r--

              

                   

                        1073741826

                        1002

                        134217728

                   

                   

                        1073741827

                        1003

                        63439959

                   

              

          

          

              16399

              FILE

              hhh.txt

              1

              1547734846206

              1547734845602

              134217728

              w4xj:supergroup:rw-r--r--

              

                   

                        1073741836

                        1012

                        2495

                   

              

          

          

              16402

              FILE

              learnToLearn2.txt

              1

              1547866930286

              1547866929490

              134217728

              w4xj:supergroup:rw-r--r--

              

                   

                        1073741837

                        1013

                        2495

                   

              

          

          

              16403

              FILE

              learnToLearn11.txt

              3

              1547869196857

              1547952711996

              134217728

              w4xj:supergroup:rw-r--r--

              

                   

                        1073741838

                        1014

                        2495

                   

              

          

     

     

     

          0

     

     

          

              16385

              16402

              16386

          

          

              16386

              16387

          

          

              16387

              16399

              16388

              16403

          

          

              16388

              16390

              16389

          

     

     

     

          

              16385

          

     

     

          0

          0

     

     

          1

     

[3].查看edits文件

①.生成xml:hdfs oev -p XML -i edits_0000000000000000114-0000000000000000117 -o ./edits.xml

②.查看





     -63

     

          OP_START_LOG_SEGMENT

          

              114

          

     

     

          OP_TIMES

          

              115

              0

              /user/w4xj/learnToLearn11.txt

              -1

              1547952711996

          

     

     

          OP_TIMES

          

              116

              0

              /user/w4xj/input/hadoop-2.7.2.tar.gz

              -1

              1547954488776

          

     

     

          OP_END_LOG_SEGMENT

          

              117

          

     

3.滚动编辑日志

[1].正常情况 HDFS 文件系统有更新操作时,就会滚动编辑日志。也可以用命令强制滚动编辑日志。

[2].滚动编辑日志(前提必须启动集群)

hdfs dfsadmin -rollEdits

[3].Namenode 启动时加载镜像文件和编辑日志

4.Namenode  版本号 号

[1].查看 namenode 版本号

在/opt/module/hadoop-2.7.2/data/tmp/dfs/name/current 这个目录下查看 VERSION

namespaceID=1933630176

clusterID=CID-1f2bf8d1-5ad2-4202-af1c-6713ab381175

cTime=0

storageType=NAME_NODE

blockpoolID=BP-97847618-192.168.10.102-1493726072779

layoutVersion=-63

[2].namenode 版本号具体解释

①.namespaceID 在 HDFS 上,会有多个 Namenode,所以不同 Namenode 的namespaceID 是不同的,分别管理一组 blockpoolID。

②.clusterID 集群 id,全局唯一

③.cTime 属性标记了 namenode 存储系统的创建时间,对于刚刚格式化的存储系统,这个属性为 0;但是在文件系统升级之后,该值会更新到新的时间戳。

④.storageType 属性说明该存储目录包含的是 namenode 的数据结构。

⑤.blockpoolID:一个 block pool id 标识一个 block pool,并且是跨集群的全局唯一。当一个新的 Namespace 被创建的时候(format 过程的一部分)会创建并持久化一个唯一 ID。在创建过程构建全局唯一的 BlockPoolID 比人为的配置更可靠一些。NN 将BlockPoolID 持久化到磁盘中,在后续的启动过程中,会再次 load 并使用。

⑥.layoutVersion 是一个负整数。通常只有 HDFS 增加新特性时才会更新这个版本号。

5.web  端访问 SecondaryNameNode

http://node204:50090/status.html

NameNode工作机制_第3张图片

6.chkpoint  检查时间参数设置[hdfs-default.xml],新增修改在[hdfs-site.xml],修改后要同步配置文件到其他节点

[1].通常情况下,SecondaryNameNode 每隔一小时执行一次。



dfs.namenode.checkpoint.period

3600

[2].一分钟检查一次操作次数,当操作次数达到 1 百万时,SecondaryNameNode 执行一次。



dfs.namenode.checkpoint.txns

1000000

操作动作次数





dfs.namenode.checkpoint.check.period

60

 1 分钟检查一次操作次数

7.SecondaryNameNode  目录结构

[1].Secondary NameNode 用来监控 HDFS 状态的辅助后台程序,每隔一段时间获取 HDFS元数据的快照。

[2].在 /opt/module/hadoop-2.7.2/data/tmp/dfs/namesecondary/current 这个目录中查看SecondaryNameNode 目录结构。

edits_0000000000000000001-0000000000000000002

fsimage_0000000000000000002

fsimage_0000000000000000002.md5

VERSION

NameNode工作机制_第4张图片

[3].SecondaryNameNode 的 namesecondary/current 目录和主 namenode 的 current 目录的布局相同。

[4].好处 :在主namenode发生故障时( 假设没有及时备份数据),可以从SecondaryNameNode 恢复数据

8.namenode故障处理方式

[1].方法一:将 SecondaryNameNode 中数据拷贝到 namenode 存储数据的目录

①.kill -9 namenode 进程

②..删除 namenode 存储的数据(/opt/module/hadoop-2.7.2/data/tmp/dfs/name)

rm -rf /opt/module/hadoop-2.7.2/data/tmp/dfs/name/*

③.拷贝 SecondaryNameNode 中数据到原 namenode 存储数据目录

scp  -r w4xj@node04:/opt/module/hadoop-2.7.2/data/tmp/dfs/namesecondary/* ./name/

④.重新启动 namenode

sbin/hadoop-daemon.sh start namenode

[2].方法二:使用-importCheckpoint 选 项 启 动 namenode 守 护 进 程 ,从而将SecondaryNameNode 中数据拷贝到 namenode 目录中。

①.修改 hdfs-site.xml 中的



dfs.namenode.checkpoint.period

120





dfs.namenode.name.dir

/opt/module/hadoop-2.7.2/data/tmp/dfs/name

②.kill -9 namenode 进程

③.删除 namenode 存储的数据(/opt/module/hadoop-2.7.2/data/tmp/dfs/name)

rm -rf /opt/module/hadoop-2.7.2/data/tmp/dfs/name/*

④. 如 果 SecondaryNameNode 不 和 Namenode 在 一 个 主 机 节 点 上 , 需 要 将SecondaryNameNode 存储数据的目录拷贝到 Namenode 存储数据的平级目录,并删除in_use.lock 文件。

scp  -r w4xj@node204:/opt/module/hadoop-2.7.2/data/tmp/dfs/namesecondary ./

rm -rf in_use.lock

pwd

/opt/module/hadoop-2.7.2/data/tmp/dfs

ls

data name namesecondary

⑤.导入检查点数据(等待一会 ctrl+c 结束掉)

bin/hdfs namenode -importCheckpoint

⑥.启动 namenode

sbin/hadoop-daemon.sh start namenode

9.集群安全模式操作

[1].Namenode 启动时,首先将映像文件(fsimage)载入内存,并执行编辑日志(edits)中的各项操作。一旦在内存中成功建立文件系统元数据的映像,则创建一个新的 fsimage 文件和一个空的编辑日志。此时,namenode 开始监听 datanode 请求。但是此刻,namenode 运行在安全模式,即 namenode 的文件系统对于客户端来说是只读的。系统中的数据块的位置并不是由 namenode 维护的,而是以块列表的形式存储在datanode 中。在系统的正常操作期间,namenode 会在内存中保留所有块位置的映射信息。在安全模式下,各个 datanode 会向 namenode 发送最新的块列表信息,namenode 了解到足够多的块位置信息之后,即可高效运行文件系统。如果满足“最小副本条件”,namenode 会在 30 秒钟之后就退出安全模式。所谓的最小副本 条 件 指 的 是 在 整 个 文 件 系 统 中 99.9% 的 块 满 足 最 小 副 本 级 别 ( 默 认 值 :dfs.replication.min=1)。在启动一个刚刚格式化的 HDFS 集群时,因为系统中还没有任何块,所以 namenode 不会进入安全模式。

[2].基本语法

bin/hdfs dfsadmin -safemode get (功能描述:查看安全模式状态)

bin/hdfs dfsadmin -safemode enter (功能描述:进入安全模式状态)

bin/hdfs dfsadmin -safemode leave  (功能描述:离开安全模式状态)

bin/hdfs dfsadmin -safemode wait  (功能描述:等待安全模式状态)

[3].案例

①.先进入安全模式

bin/hdfs dfsadmin -safemode enter

②.执行下面的脚本

#!/bin/bash

bin/hdfs dfsadmin -safemode wait

bin/hdfs dfs -put ~/hello.txt /root/hello.txt

③.再打开一个窗口,执行

bin/hdfs dfsadmin -safemode leave

10.Namenode 多目录配置

[1].namenode 的本地目录可以配置成多个,且每个目录存放内容相同,增加了可靠性。

[2].在 hdfs-site.xml 文件中增加如下内容



dfs.namenode.name.dir

file:///${hadoop.tmp.dir}/dfs/name1,file:///${hadoop.tmp.dir}/dfs/name2

[3].停止集群,删除 data 和 logs 中所有数据。

rm -rf data/ logs/

[4].格式化集群并启动。

bin/hdfs namenode –format

sbin/start-dfs.sh

[5].查看结果

NameNode工作机制_第5张图片

 

你可能感兴趣的:(hadoop)