HDFS

Posted Code_exploration

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

    含义:将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。

 

以上是关于HDFS的主要内容,如果未能解决你的问题,请参考以下文章

独家 | 带你认识HDFS和如何创建3个节点HDFS集群(附代码&案例)

微信小程序代码片段

VSCode自定义代码片段——CSS选择器

如何从 Scala 代码中读取 HDFS 文件

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

片段和活动之间的核心区别是啥?哪些代码可以写成片段?