HDFS体系结构 |
1:namenode[守护进程]作用:
-->管理文件系统名称空间;【fsimage元数据镜像文件】
-->管理客户端对文件的访问;【edits操作文件】
-->Namenode执行文件系统命名空间操作,如打开,关闭,重命名文件和目录【edits操作文件】
-->确定block到Datanode的映射(注意:通过心跳机制,status和blockreport:默认3秒一次)
2:datanode[守护进程]:
-->用于管理连接到它们所运行的节点的存储。【block信息:block和block.mate】
-->负责提供来自文件系统客户端的读取和写入请求
-->还执行块创建,删除
3:block:文件被分成一个或多个块,这些块存储在一组Datanode中(默认3份)
元数据 |
1:查看fsimage文件
命令:$>hdfs oiv -i fsimage_0000000000000000022 -o ~/fs22.xml -p XML
含义:将fsimage0000000000000000022的这个文件导出到~/fs22.xml 以XML的格式
<?xml version="1.0"?> <fsimage> <NameSection> <genstampV1>1000</genstampV1> <genstampV2>1002</genstampV2> <genstampV1Limit>0</genstampV1Limit> <!-- 描述当前镜像的最后一个块ID --> <lastAllocatedBlockId>1073741826</lastAllocatedBlockId> <!-- 事务ID-对应的是fsimage_0000000000000000022 --> <txid>22</txid> </NameSection> <INodeSection> <lastInodeId>16390</lastInodeId> <!-- inode节点描述HDFS文件系统所有信息 我们保留文件/块层次结构的内存中表示。这是一个基本的INode类,它包含文件和文件的公共字段目录inode。 --> <inode> <id>16385</id> <type>DIRECTORY</type> <name></name> <mtime>1528043810446</mtime> <permission>hyxy:supergroup:rwxr-xr-x</permission> <nsquota>9223372036854775807</nsquota> <dsquota>-1</dsquota> </inode> <inode> <id>16386</id> <type>DIRECTORY</type> <name>user</name> <mtime>1528043865470</mtime> <permission>hyxy:supergroup:rwxr-xr-x</permission> <nsquota>-1</nsquota> <dsquota>-1</dsquota> </inode> <inode> <id>16387</id> <type>DIRECTORY</type> <name>hyxy</name> <mtime>1528044944833</mtime> <permission>hyxy:supergroup:rwxr-xr-x</permission> <nsquota>-1</nsquota> <dsquota>-1</dsquota> </inode> <inode> <id>16388</id> <type>DIRECTORY</type> <name>20180603</name> <mtime>1528044017284</mtime> <permission>hyxy:supergroup:rwxr-xr-x</permission> <nsquota>-1</nsquota> <dsquota>-1</dsquota> </inode> <inode> <id>16390</id> <type>FILE</type> <name>text.txt</name> <replication>3</replication> <mtime>1528044017272</mtime> <atime>1528044016919</atime> <perferredBlockSize>134217728</perferredBlockSize> <permission>hyxy:supergroup:rw-r--r--</permission> <blocks> <block> <id>1073741826</id> <genstamp>1002</genstamp> <numBytes>12</numBytes> </block> </blocks> </inode> </INodeSection> <INodeReferenceSection></INodeReferenceSection> <SnapshotSection> <snapshotCounter>0</snapshotCounter> </SnapshotSection> <INodeDirectorySection> <directory> <parent>16385</parent> <inode>16386</inode> </directory> <directory> <parent>16386</parent> <inode>16387</inode> </directory> <directory> <parent>16387</parent> <inode>16388</inode> </directory> <directory> <parent>16388</parent> <inode>16390</inode> </directory> </INodeDirectorySection> <FileUnderConstructionSection></FileUnderConstructionSection> <SnapshotDiffSection> <diff> <inodeid>16385</inodeid> </diff> </SnapshotDiffSection> <SecretManagerSection> <currentId>0</currentId> <tokenSequenceNumber>0</tokenSequenceNumber> </SecretManagerSection> <CacheManagerSection> <nextDirectiveId>1</nextDirectiveId> </CacheManagerSection> </fsimage>
hdfs:分布式文件系统【分布式{切块和复本}---文件系统{逻辑上的}】
镜像文件当中包含哪些信息,参照上述XML
2:查看edits文件
命令:$>hdfs oev -i edits_inprogress_0000000000000000040 -o ~/ed.xml
含义:将edits_inprogress_0000000000000000040文件导出到~/ed.xml 默认为XML格式
<?xml version="1.0" encoding="UTF-8"?> <EDITS> <EDITS_VERSION>-63</EDITS_VERSION> <RECORD> <OPCODE>OP_START_LOG_SEGMENT</OPCODE> <DATA> <TXID>40</TXID> </DATA> </RECORD> <RECORD> <OPCODE>OP_MKDIR</OPCODE> <DATA> <TXID>41</TXID> <LENGTH>0</LENGTH> <INODEID>16392</INODEID> <PATH>/hyxy</PATH> <TIMESTAMP>1528055285399</TIMESTAMP> <PERMISSION_STATUS> <USERNAME>hyxy</USERNAME> <GROUPNAME>supergroup</GROUPNAME> <MODE>493</MODE> </PERMISSION_STATUS> </DATA> </RECORD> </EDITS>
edits文件记录的是我们的操作,里面有个record标签,下面就是记录的我们的操作。
namenode的开启和运行过程 |
一:开启
1:默认目录下{hadoop.tmp.dir/dfs/name/current},fsimage文件存储为2个,加载fsimage_txid最后一个。
2:加载edits_txid操作文件至内存中,元数据已经全部加在在内存上。
3:保存checkpoint(检查点):合并fsimage和edits文件,重新生成新的镜像文件。
4:等待接受来自datanode的block report。
二:运行(内存)
1:记录对hdfs的编辑操作,追加到edits_inprogress_txid
2:更新内存中的元数据,达到一定的阈值后,运行checkpoint(检查点)
3:接受来自datanode的心跳信息
checkpoint检查点机制(相关属性) |
1:checkpoint周期,默认为3600秒
<property> <name>dfs.namenode.checkpoint.period</name> <value>3600</value> <description> 两个定期检查点之间的秒数。 </description> </property>
2:txid的次数达到1百万次,也执行checkpoint,与周期无关
<property> <name>dfs.namenode.checkpoint.txns</name> <value>1000000</value> <description> 无论'dfs.namenode.checkpoint.period'是否已经过期,Secondary NameNode或CheckpointNode都会为每个'dfs.namenode.checkpoint.txns'事务创建名称空间的检查点。 </description> </property>
3:每隔60秒检查txid操作次数
<property> <name>dfs.namenode.checkpoint.check.period</name> <value>60</value> <description> SecondaryNameNode和CheckpointNode会每隔60秒查询NameNode以查询未检查点的事务数量。 </description> </property>
上述两个条件均可以触发checkpoint。