第2.2.3章 hadoop的管理

这个章节的名字套用的是《Hadoop权威指南》第10章的名称,按图索骥,实地看看hadoop里面有什么。
1 名称节点
NameNode作用是管理DataNode,新格式化的namenode目录结构如下:

# dfs.namenode.name.dir在hdfs-site.xml中配置了路径
# 这里跟书上不一样,没有 fstime目录
${dfs.namenode.name.dir}/current/VERSION edits fsimage

1
1.1 VERSION
hdfs的版本信息

[root@bwsc65 current]# cat VERSION 
#Tue May 21 13:55:59 CST 2019
# 首次格式化时创建,namenode使用它来识别新的datanode
namespaceID=253272
clusterID=CID-e1282762-e353-42b2-8198-3554c2d61794
# 只要文件系统更新,才会更新时间戳。那么什么条件才算文件系统更新呢?
cTime=0
# 这里表示,存储目录的数据结构是名称节点
storageType=NAME_NODE
blockpoolID=BP-1983526508-10.101.10.65-1558418159045
# 每次布局改变,版本号就会递减,HDFS升级时使用。
layoutVersion=-60

从下图可以看到,我的namenode目录下面有40万个文件,cTime照样是0.
2
1.2 fsimage
执行命令hdfs oiv -i fsimage_0000000000000061901 -o /tmp/fsimage_log.xml -p XML查看fsimage中的内容,fsimage文件是文件系统元数据的持久性检查点
从下图可以看到fsimage与edits文件之间是有联系的,fsimage是记录元数据,参考Hadoop 之 NameNode 元数据原理中说明,
Fsimage就是在某一时刻,整个hdfs 的快照,就是这个时刻hdfs上所有的文件块和目录,分别的状态,位于哪些个datanode,各自的权限,各自的副本个数等,Block的位置信息不会保存到fsimage,Block保存在哪个DataNode(由DataNode启动时上报。
也就可以理解为元数据和操作分开
2
文件内容示例如下:
7
1.3 edits
执行命令hdfs oev -i edits_0000000000000061902-0000000000000061990 -o /tmp/edit_log.xml可以查看到edits文件中的内容
1
edits文件记录namenode接收的每一次的写(上传、删除、追加)请求等操作,具体参考Hadoop HDFS详解和常用指令,可以了解到
2 第二名称节点
第2.1.2章 hadoop之hadoop集群(二)安装配置中描述了SecondaryNameNode的配置
我并没有配置fs.checkpoint.dir,参见hadoop2.6.4因为已经没有了,取而代之的是dfs.namenode.checkpoint.dir,不过这项有默认值为file://${hadoop.tmp.dir}/dfs/namesecondary
2
这里可以看到他的目录结构和namenode一样。
SecondaryNameNode作用是辅助NameNode进行元数据的合并。因为NameNode重新启动,会花很长时间来运行edits文件中的每个操作。
下图来自《hadoop权威指南》,SecondaryNameNode让Namenode滚动edits文件,通过HTTP请求获取到SecondaryNameNode之后,合并edtis和fsimage为新的fsimage文件,在替换Namenode中的fsimage文件。
这个过程很容易想到既然合并过程是耗时,那么SecondaryNameNode也同样耗时,另外SecondaryNameNode通过HTTP GET获取Namenode中fsimage文件也有时间。故在数据量在一定程度SecondaryNameNode应该升级为独立的机器,而机器与之间的内网通信,网卡性能也会做考量。
这个合并过程当HDFS第一次启动的时候,edits和fsimage在启动一分钟之后自动合并一次;后续就是按照指定时间间隔进行合并,配置信息在core-site.xml

<property>
            <name>fs.checkpoint.period</name>
            <value>36000</value>
            <description>The number of seconds between two periodic checkpoints.</description>
    </property>
        <property>
            <name>fs.checkpoint.size</name>
            <value>67108864</value>
            <description>The size of the current edit log (in bytes) that triggers a periodic checkpoint even if the fs.checkpoint.period hasn't expired.  </description>
         </property>

查看namenode的启动日志,就会发现他在干什么了

nt/edits_0000000000041686808-0000000000041686809' to transaction ID 19166105
2019-09-05 12:00:20,964 INFO org.apache.hadoop.hdfs.server.namenode.FSImage: Edits file /application/hadoop/dfs/name/current/edits_0000000000041686808-0000000000041686809 of size 42 edits # 2 loaded in 0 seconds
2019-09-05 12:00:20,964 INFO org.apache.hadoop.hdfs.server.namenode.FSImage: Reading org.apache.hadoop.hdfs.server.namenode.RedundantEditLogInputStream@34c07455 expecting start txid #41686810
2019-09-05 12:00:20,964 INFO org.apache.hadoop.hdfs.server.namenode.FSImage: Start loading edits file /application/hadoop/dfs/name/current/edits_0000000000041686810-0000000000041686811
2019-09-05 12:00:20,964 INFO org.apache.hadoop.hdfs.server.namenode.EditLogInputStream: Fast-forwarding stream '/application/hadoop/dfs/name/current/edits_0000000000041686810-0000000000041686811' to transaction ID 19166105
2019-09-05 12:00:20,972 INFO org.apache.hadoop.hdfs.server.namenode.FSImage: Edits file /application/hadoop/dfs/name/current/edits_0000000000041686810-0000000000041686811 of size 42 edits # 2 loaded in 0 seconds
2019-09-05 12:00:20,972 INFO org.apache.hadoop.hdfs.server.namenode.FSImage: Reading org.apache.hadoop.hdfs.server.namenode.RedundantEditLogInputStream@4f428ad1 expecting start txid #41686812
2019-09-05 12:00:20,972 INFO org.apache.hadoop.hdfs.server.namenode.FSImage: Start loading edits file /application/hadoop/dfs/name/current/edits_0000000000041686812-0000000000041686820
2019-09-05 12:00:20,972 INFO org.apache.hadoop.hdfs.server.namenode.EditLogInputStream: Fast-forwarding stream '/application/hadoop/dfs/name/current/edits_0000000000041686812-0000000000041686820' to transaction ID 19166105
2019-09-05 12:00:20,975 INFO org.apache.hadoop.hdfs.server.namenode.FSImage: Edits file /application/hadoop/dfs/name/current/edits_0000000000041686812-0000000000041686820 of size 798 edits # 9 loaded in 0 seconds
2019-09-05 12:00:20,975 INFO org.apache.hadoop.hdfs.server.namenode.FSImage: Reading org.apache.hadoop.hdfs.server.namenode.RedundantEditLogInputStream@3f31070c expecting start txid #41686821
2019-09-05 12:00:20,975 INFO org.apache.hadoop.hdfs.server.namenode.FSImage: Start loading edits file /application/hadoop/dfs/name/current/edits_0000000000041686821-0000000000041686822
2019-09-05 12:00:20,975 INFO org.apache.hadoop.hdfs.server.namenode.EditLogInputStream: Fast-forwarding stream '/application/hadoop/dfs/name/current/edits_0000000000041686821-0000000000041686822' to transaction ID 19166105

8
3 Datanode
datanode的目录结构按下图所示,可以看到这里有一个blockpoolID命名的文件夹
1

发布了317 篇原创文章 · 获赞 168 · 访问量 46万+

猜你喜欢

转载自blog.csdn.net/warrah/article/details/95449205
今日推荐