Java大数据开发(三)Hadoop(12)-NameNode和SecondaryNameNode2

2021年11月21日 阅读数:11
这篇文章主要向大家介绍Java大数据开发(三)Hadoop(12)-NameNode和SecondaryNameNode2,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。
导读:上一节咱们讲解了在HDFS的NameNode和SecondaryNameNode,是如何在请求元数据的的时候,保证安全和效率的。这一点是必须掌握的,这一节,咱们继续对 N ame N ode和 SecondaryNameNode的知识作一些补充。

Fsimage和Editscss


NameNode被格式化以后,将在/opt/dev/hadoop-2.7.2/data/tmp/dfs/name/current目录中产生以下文件java


[root@hadoop100 current]# ll总用量 3120-rw-r--r--. 1 root root      42 3月  27 16:42 edits_0000000000000000001-0000000000000000002-rw-r--r--. 1 root root 1048576 3月  27 16:42 edits_0000000000000000003-0000000000000000003-rw-r--r--. 1 root root     994 3月  31 17:02 edits_0000000000000000004-0000000000000000018-rw-r--r--. 1 root root 1048576 3月  31 17:02 edits_0000000000000000019-0000000000000000019-rw-r--r--. 1 root root      42 3月  31 18:14 edits_0000000000000000020-0000000000000000021-rw-r--r--. 1 root root     414 3月  31 19:14 edits_0000000000000000022-0000000000000000028-rw-r--r--. 1 root root      42 3月  31 20:14 edits_0000000000000000029-0000000000000000030-rw-r--r--. 1 root root      42 3月  31 21:14 edits_0000000000000000031-0000000000000000032-rw-r--r--. 1 root root 1048576 3月  31 21:14 edits_inprogress_0000000000000000033-rw-r--r--. 1 root root     689 3月  31 20:14 fsimage_0000000000000000030-rw-r--r--. 1 root root      62 3月  31 20:14 fsimage_0000000000000000030.md5-rw-r--r--. 1 root root     689 3月  31 21:14 fsimage_0000000000000000032-rw-r--r--. 1 root root      62 3月  31 21:14 fsimage_0000000000000000032.md5-rw-r--r--. 1 root root       3 3月  31 21:14 seen_txid-rw-r--r--. 1 root root     204 3月  31 16:05 VERSION


(1)Fsimage文件:HDFS文件系统元数据的一个永久性的检查点,其中包含HDFS文件系统的全部目录和文件idnode的序列化信息。 node


(2)Edits文件:存放HDFS文件系统的全部更新操做的路径,文件系统客户端执行的全部写操做首先会被记录到edits文件中。 nginx


(3)seen_txid文件保存的是一个数字,就是最后一个edits_的数字安全


(4)每次Namenode启动的时候都会将fsimage文件读入内存,并从00001开始到seen_txid中记录的数字依次执行每一个edits里面的更新操做,保证内存中的元数据信息是最新的、同步的,能够当作Namenode启动的时候就将fsimage和edits文件进行了合并。ruby


oiv查看fsimage文件微信


(1)查看oiv和oev命令数据结构


hdfs oiv    ## 在线查看fsimage              hdfs oev    ## 在线查看edits file


(2)基本语法app


hdfs oiv -p 文件类型 -i镜像文件 -o 转换后文件输出路径


(3)案例实操eclipse


[root@hadoop100 current]$ pwd/opt/dev/hadoop-2.7.2/data/tmp/dfs/name/current

[root@hadoop100 current]$ hdfs oiv -p XML -i fsimage_000000000000000003 -o /opt/dev/hadoop-2.7.2/fsimage.xml
[root@hadoop100 current]$ cat /opt/dev/hadoop-2.7.2/fsimage.xml## 将显示的xml文件内容拷贝到eclipse中建立的xml文件中,并格式化。 


oev查看edits文件


(1)基本语法


hdfs oev -p 文件类型 -i编辑日志 -o 转换后文件输出路径


(2)案例实操


[root@hadoop100 current]$ hdfs oev -p XML -i edits_0000000000000000012-0000000000000000013 -o /opt/dev/hadoop-2.7.2/edits.xml
[root@hadoop100 current]$ cat /opt/dev/hadoop-2.7.2/edits.xml## 将显示的xml文件内容拷贝到eclipse中建立的xml文件中,并格式化。


namenode版本号


一、查看namenode版本号


在/opt/dev/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.1.100-1493726072779
layoutVersion=-63


二、namenode版本号具体解释


(1)namespaceID在HDFS上,会有多个Namenode,因此不一样Namenode的namespaceID是不一样的,分别管理一组blockpoolID。


(2)clusterID集群id,全局惟一


(3)cTime属性标记了namenode存储系统的建立时间,对于刚刚格式化的存储系统,这个属性为0;可是在文件系统升级以后,该值会更新到新的时间戳。


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


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


(6)layoutVersion是一个负整数。一般只有HDFS增长新特性时才会更新这个版本号。


NameNode故障处理


方法一:将SecondaryNameNode中数据拷贝到NameNode存储数据的目录


1. kill -9 NameNode进程


2. 删除NameNode存储的数据


[root@hadoop100 hadoop-2.7.2]$ rm -rf /opt/dev/hadoop-2.7.2/data/tmp/dfs/name/*


3. 拷贝SecondaryNameNode中数据到原NameNode存储数据目录

[root@hadoop100 dfs]$ scp -r root@hadoop102:/opt/dev/hadoop-2.7.2/data/tmp/dfs/namesecondary/* ./name/


4. 从新启动NameNode

[root@hadoop100 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start namenode


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


1. 修改hdfs-site.xml中的

<property>  <name>dfs.namenode.checkpoint.period</name>  <value>120</value></property>
<property>  <name>dfs.namenode.name.dir</name>  <value>/opt/dev/hadoop-2.7.2/data/tmp/dfs/name</value></property>


2.  kill -9 NameNode进程


3.删除NameNode存储的数据


[root@hadoop100 hadoop-2.7.2]$ rm -rf /opt/dev/hadoop-2.7.2/data/tmp/dfs/name/*


4.若是SecondaryNameNode不和NameNode在一个主机节点上,须要将SecondaryNameNode存储数据的目录拷贝到NameNode存储数据的平级目录,并删除in_use.lock文件


[root@hadoop100 dfs]$ scp -r root@hadoop102:/opt/dev/hadoop-2.7.2/data/tmp/dfs/namesecondary ./

 

[root@hadoop100 namesecondary]$ rm -rf in_use.lock


[root@hadoop100 dfs]$ pwd/opt/dev/hadoop-2.7.2/data/tmp/dfs
[root@hadoop100 dfs]$ lsdata name namesecondary


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


[root@hadoop100 hadoop-2.7.2]$ bin/hdfs namenode -importCheckpoint


6.启动NameNode


[root@hadoop100 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start namenode


关注「跟我一块儿学大数据」

跟我一块儿学大数据

本文分享自微信公众号 - 跟我一块儿学大数据(java_big_data)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。