HDFS的体系结构

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

<?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

<?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>

分析namenode开启过程

----------------------------

1.默认目录下{hadoop.tmp.dir/dfs/name/current},fsimage文件存储为两个,加载fsimage_txid最后一个。(txid=39)

2.加载edits_txid操作文件至内存中。元数据已全部加载至内存上。(txid=40-41)

3.保存checkpoint(检查点):合并fsimage和edits文件,重新生成新的镜像文件

4.等待接受来自datanode的block report

分析namenode运行过程(内存)

-----------------------------

1.记录对hdfs的编辑操作,追加edits_inprogress_txid

2.更新内存中的元数据;达到一定阈值后,运行checkpoint(检查点)

3.接受来自datanode的心跳信息

checkpoint(检查点机制)相关属性

----------------------------------------

1.checkpoint周期,默认为1小时。

<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>

注意:达到1小时或操作txid大于1百万次或edits文件大于64m???,均可触发checkpoint操作

猜你喜欢

转载自blog.csdn.net/zy_remarkable/article/details/80619288
今日推荐