1.5.6 NN与2NN-hadoop-最全最完整的保姆级的java大数据学习资料 ...

打印 上一主题 下一主题

主题 681|帖子 681|积分 2043

目录

1.5.6 NN与2NN

1.5.6.1 HDFS元数据管理机制

问题1:NameNode如何管理和存储元数据?
计算机中存储数据两种:内存或者是磁盘
元数据存储磁盘:存储磁盘无法面对客户端对元数据信息的任意的快速低延迟的响应,但是安全性高
元数据存储内存:元数据存放内存,可以高效的查询以及快速响应客户端的查询请求,数据保存在内 存,如果断点,内存中的数据全部丢失。
解决方案:内存+磁盘;NameNode内存+FsImage的文件(磁盘)
新问题:磁盘和内存中元数据如何划分?
两个数据一模一样,还是两个数据合并到一起才是一份完整的数据呢?
一模一样:client如果对元数据进行增删改操作,需要保证两个数据的一致性。FsImage文件操作起来 效率也不高。
两个合并=完整数据:NameNode引入了一个edits文件(日志文件:只能追加写入)edits文件记录的 是client的增删改操作,
不再选择让NameNode把数据dump出来形成FsImage文件(这种操作是比较消耗资源)。
元数据管理流程图


  • 第一阶段:NameNode启动

    • 第一次启动NameNode格式化后,创建Fsimage和Edits文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。
    • 客户端对元数据进行增删改的请求。
    • NameNode记录操作日志,更新滚动日志。
    • NameNode在内存中对数据进行增删改。

  • 第二阶段:Secondary NameNode工作

    • Secondary NameNode询问NameNode是否需要CheckPoint。直接带回NameNode是否执行检查点操作结果。
    • Secondary NameNode请求执行CheckPoint。
    • NameNode滚动正在写的Edits日志。
    • 将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode。
    • Secondary NameNode加载编辑日志和镜像文件到内存,并合并。
    • 生成新的镜像文件fsimage.chkpoint。
    • 拷贝fsimage.chkpoint到NameNode。
    • NameNode将fsimage.chkpoint重新命名成fsimage。

1.5.6.2 Fsimage与Edits文件解析

NameNode在执行格式化之后,会在/opt/lagou/servers/hadoop-2.9.2/data/tmp/dfs/name/current目录下产生如下文件


  • Fsimage文件:是namenode中关于元数据的镜像,一般称为检查点,这里包含了HDFS文件系统所有目录以及文件相关信息(Block数量,副本数量,权限等信息)
  • Edits文件  :存储了客户端对HDFS文件系统所有的更新操作记录,Client对HDFS文件系统所有的更新操作都会被记录到Edits文件中(不包括查询操作)
  • seen_txid:该文件是保存了一个数字,数字对应着最后一个Edits文件名的数字
  • VERSION:该文件记录namenode的一些版本号信息,比如:CusterId,namespaceID等


1.5.6.2.1 Fsimage文件内容

官方地址https://hadoop.apache.org/docs/r2.9.2/hadoop-project-dist/hadoop-hdfs/HdfsImageViewer.html

  • 查看oiv和oev命令
    1. [root@linux121 current]$ hdfs
    2. oiv     Offline Image Viewer  View a Hadoop fsimage INPUTFILE using the specified PROCESSOR,saving the results in OUTPUTFILE.
    3. oev     Offline edits viewer  Parse a Hadoop edits log file INPUT_FILE and save results in OUTPUT_FILE
    复制代码
  • 基本语法
    1. hdfs oiv -p 文件类型(xml) -i 镜像文件 -o 转换后文件输出路径
    复制代码
  • 案例实操
    1. [root@linux121 current]$ cd /opt/lagou/servers/hadoop-2.9.2/data/tmp/dfs/name/current
    2. [root@linux121 current]$ hdfs oiv -p XML -i fsimage_0000000000000000265 -o /opt/lagou/servers/fsimage.xml
    3. [root@linux121 current]$ cat /opt/lagou/servers/fsimage.xml
    复制代码
    1. <?xml version="1.0"?>
    2. <fsimage>
    3.         <version>
    4.                 <layoutVersion>-63</layoutVersion>
    5.                 <onDiskVersion>1</onDiskVersion>
    6.                 <oivRevision>826afbeae31ca687bc2f8471dc841b66ed2c6704</oivRevision>
    7.     </version>
    8.         <NameSection>
    9.                 <namespaceId>1393381414</namespaceId>
    10.                 <genstampV1>1000</genstampV1>
    11.                 <genstampV2>1024</genstampV2>
    12.                 <genstampV1Limit>0</genstampV1Limit>
    13.                 <lastAllocatedBlockId>1073741848</lastAllocatedBlockId>
    14.                 <txid>265</txid>
    15.         </NameSection>
    16.         <INodeSection>
    17.                 <inode>
    18.                         <id>16398</id>
    19.                         <type>DIRECTORY</type>
    20.                         <name>history</name>
    21.                         <mtime>1592376391028</mtime>
    22.                         <permission>root:supergroup:0777</permission>
    23.                         <nsquota>-1</nsquota>
    24.                         <dsquota>-1</dsquota>
    25.                 </inode>
    26.                 <inode>
    27.                         <id>16399</id>
    28.                         <type>DIRECTORY</type>
    29.                         <name>done_intermediate</name>
    30.                         <mtime>1592375256896</mtime>
    31.                         <permission>root:supergroup:1777</permission>
    32.                         <nsquota>-1</nsquota>
    33.                         <dsquota>-1</dsquota>
    34.                 </inode>
    35.                 <inode>
    36.                         <id>16400</id>
    37.                         <type>DIRECTORY</type>
    38.                         <name>root</name>
    39.                         <mtime>1592378079208</mtime>
    40.             <permission>root:supergroup:0777</permission>
    41.                         <nsquota>-1</nsquota>
    42.                         <dsquota>-1</dsquota>
    43.                 </inode>
    44.                 <inode>
    45.                         <id>16413</id>
    46.                         <type>FILE</type>
    47.                         <name>job_1592375222804_0001-1592375231176-root-word+count-1592375281926-1-1-SUCCEEDED-default-                                        1592375261492.jhist</name>
    48.                         <replication>3</replication>
    49.                         <mtime>1592375282039</mtime>
    50.                         <atime>1592375281980</atime>
    51.                         <preferredBlockSize>134217728</preferredBlockSize>
    52.                         <permission>root:supergroup:0777</permission>
    53.                         <blocks>
    54.                                 <block>
    55.                                         <id>1073741834</id>
    56.                                         <genstamp>1010</genstamp>
    57.                                         <numBytes>33584</numBytes>
    58.                                 </block>
    59.                         </blocks>
    60.                         <storagePolicyId>0</storagePolicyId>
    61.                 </inode>
    62.                 <inode>
    63.                         <id>16414</id>
    64.                         <type>FILE</type>
    65.                         <name>job_1592375222804_0001_conf.xml</name>
    66.                         <replication>3</replication>
    67.                         <mtime>1592375282121</mtime>
    68.                         <atime>1592375282053</atime>
    69.                         <preferredBlockSize>134217728</preferredBlockSize>
    70.                         <permission>root:supergroup:0777</permission>
    71.                         <blocks>
    72.                                 <block>
    73.                                         <id>1073741835</id>
    74.                                         <genstamp>1011</genstamp>
    75.                                         <numBytes>196027</numBytes>
    76.                                 </block>
    77.                         </blocks>
    78.                         <storagePolicyId>0</storagePolicyId>
    79.                 </inode>
    80.                 <inode>
    81.                         <id>16415</id>
    82.                         <type>DIRECTORY</type>
    83.                         <name>done</name>
    84.                         <mtime>1592376776670</mtime>
    85.                         <permission>root:supergroup:0777</permission>
    86.                         <nsquota>-1</nsquota>
    87.                         <dsquota>-1</dsquota>
    88.                 </inode>
    89.        
    90.         <inode>
    91.                         <id>16427</id>
    92.                         <type>DIRECTORY</type>
    93.                         <name>logs</name>
    94.                         <mtime>1592378009623</mtime>
    95.                         <permission>root:root:0770</permission>
    96.                         <nsquota>-1</nsquota>
    97.             <dsquota>-1</dsquota>
    98.                 </inode>
    99.                 <inode>
    100.                         <id>16428</id>
    101.                         <type>DIRECTORY</type>
    102.                         <name>application_1592376944601_0001</name>
    103.                         <mtime>1592378045481</mtime>
    104.                         <permission>root:root:0770</permission>
    105.                         <nsquota>-1</nsquota>
    106.                         <dsquota>-1</dsquota>
    107.                 </inode>
    108.                 <inode>
    109.                         <id>16430</id>
    110.                         <type>DIRECTORY</type>
    111.                         <name>wcoutput</name>
    112.                         <mtime>1592378037463</mtime>
    113.                         <permission>root:supergroup:0755</permission>
    114.                         <nsquota>-1</nsquota>
    115.                         <dsquota>-1</dsquota>
    116.                 </inode>
    117.                 <inode>
    118.                         <id>16436</id>
    119.                         <type>FILE</type>
    120.                         <name>part-r-00000</name>
    121.                         <replication>3</replication>
    122.                         <mtime>1592378037264</mtime>
    123.                         <atime>1592378037074</atime>
    124.                         <preferredBlockSize>134217728</preferredBlockSize>
    125.             <permission>root:supergroup:0644</permission>
    126.                         <blocks>
    127.                                 <block>
    128.                                         <id>1073741842</id>
    129.                                         <genstamp>1018</genstamp>
    130.                                         <numBytes>43</numBytes>
    131.                                 </block>
    132.                         </blocks>
    133.                         <storagePolicyId>0</storagePolicyId>
    134.                 </inode>
    135.                 <inode>
    136.                         <id>16445</id>
    137.                         <type>FILE</type>
    138.                         <name>linux123_39919</name>
    139.                         <replication>3</replication>
    140.                         <mtime>1592378045469</mtime>
    141.                         <atime>1592378045331</atime>
    142.                         <preferredBlockSize>134217728</preferredBlockSize>
    143.             <permission>root:root:0640</permission>
    144.                         <blocks>
    145.                                 <block>
    146.                                         <id>1073741848</id>
    147.                                         <genstamp>1024</genstamp>
    148.                                         <numBytes>56910</numBytes>
    149.                                 </block>
    150.                         </blocks>
    151.                         <storagePolicyId>0</storagePolicyId>
    152.                 </inode>
    153.                 <inode>
    154.             <id>16446</id>
    155.                         <type>DIRECTORY</type>
    156.                         <name>0617</name>
    157.                         <mtime>1592387393490</mtime>
    158.                         <permission>root:supergroup:0755</permission>
    159.                         <nsquota>-1</nsquota>
    160.                         <dsquota>-1</dsquota>
    161.                 </inode>
    162.                 <inode>
    163.                         <id>16449</id>
    164.                         <type>FILE</type>
    165.                         <name>banzhang.txt</name>
    166.                         <replication>1</replication>
    167.                         <mtime>1592388309046</mtime>
    168.                         <atime>1592388309026</atime>
    169.                         <preferredBlockSize>134217728</preferredBlockSize>
    170.             <permission>root:supergroup:0644</permission>
    171.                         <storagePolicyId>0</storagePolicyId>
    172.                 </inode>
    173.         </INodeSection>
    174.    
    175. </fsimage>
    复制代码
    问题:Fsimage中为什么没有记录块所对应DataNode?

在内存元数据中是有记录块所对应的dn信息,但是fsimage中就剔除了这个信息;HDFS集群在启动的 时候会加载image以及edits文件,block对应的dn信息
都没有记录,集群启动时会有一个安全模式 (safemode),安全模式就是为了让dn汇报自己当前所持有的block信息给nn来补全元数据。后续每隔一段时间dn
都要汇报自己持有的block信息。
1.5.6.2.2 Edits文件内容


  • 基本语法
  1. hdfs oev -p 文件类型 -i编辑日志 -o 转换后文件输出路径
复制代码

  • 案例实操
    1. [root@linux121 current]$ hdfs oev -p XML -i edits_0000000000000000266- 0000000000000000267 -o /opt/lagou/servers/hadoop-2.9.2/edits.xml
    2. [root@linux121 current]$ cat /opt/lagou/servers/hadoop-2.9.2/edits.xml
    复制代码
    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <EDITS>
    3.         <EDITS_VERSION>-63</EDITS_VERSION>
    4.         <RECORD>
    5.                 <OPCODE>OP_START_LOG_SEGMENT</OPCODE>
    6.         <DATA>
    7.                         <TXID>113</TXID>
    8.                 </DATA>
    9.         </RECORD>
    10.         <RECORD>
    11.                 <OPCODE>OP_SET_PERMISSIONS</OPCODE>
    12.         <DATA>
    13.                         <TXID>114</TXID>
    14.                         <SRC>/wcoutput/_SUCCESS</SRC>
    15.                         <MODE>493</MODE>
    16.                 </DATA>
    17.         </RECORD>
    18.         <RECORD>
    19.                 <OPCODE>OP_SET_PERMISSIONS</OPCODE>
    20.         <DATA>
    21.                         <TXID>115</TXID>
    22.                         <SRC>/wcoutput/part-r-00000</SRC>
    23.             <MODE>493</MODE>
    24.                 </DATA>
    25.         </RECORD>
    26.         <RECORD>
    27.                 <OPCODE>OP_SET_PERMISSIONS</OPCODE>
    28.         <DATA>
    29.                         <TXID>116</TXID>
    30.                         <SRC>/wcoutput</SRC>
    31.                         <MODE>511</MODE>
    32.                 </DATA>
    33.         </RECORD>
    34.         <RECORD>
    35.                 <OPCODE>OP_SET_PERMISSIONS</OPCODE>
    36.         <DATA>
    37.                         <TXID>117</TXID>
    38.                         <SRC>/wcoutput/_SUCCESS</SRC>
    39.                         <MODE>511</MODE>
    40.                 </DATA>
    41.         </RECORD>
    42.         <RECORD>
    43.                 <OPCODE>OP_SET_PERMISSIONS</OPCODE>
    44.         <DATA>
    45.                         <TXID>118</TXID>
    46.                         <SRC>/wcoutput/part-r-00000</SRC>
    47.             <MODE>511</MODE>
    48.                 </DATA>
    49.         </RECORD>
    50.         <RECORD>
    51.         <OPCODE>OP_DELETE</OPCODE>
    52.                 <DATA>
    53.                         <TXID>119</TXID>
    54.                         <LENGTH>0</LENGTH>
    55.                         <PATH>/wcoutput/part-r-00000</PATH>
    56.                         <TIMESTAMP>1592377324171</TIMESTAMP>
    57.                         <RPC_CLIENTID></RPC_CLIENTID>
    58.                         <RPC_CALLID>-2</RPC_CALLID>
    59.                 </DATA>
    60.         </RECORD>
    61.         <RECORD>
    62.                 <OPCODE>OP_SET_PERMISSIONS</OPCODE>
    63.                 <DATA>
    64.                         <TXID>120</TXID>
    65.                         <SRC>/</SRC>
    66.                         <MODE>511</MODE>
    67.                 </DATA>
    68.         </RECORD>
    69.         <RECORD>
    70.                 <OPCODE>OP_SET_PERMISSIONS</OPCODE>
    71.                 <DATA>
    72.                         <TXID>121</TXID>
    73.                         <SRC>/tmp</SRC>
    74.                         <MODE>511</MODE>
    75.                 </DATA>
    76.         </RECORD>
    77.         <RECORD>
    78.                 <OPCODE>OP_SET_PERMISSIONS</OPCODE>
    79.                 <DATA>
    80.                         <TXID>122</TXID>
    81.                         <SRC>/tmp/hadoop-yarn</SRC>
    82.                         <MODE>511</MODE>
    83.                 </DATA>
    84.         </RECORD>
    85.         <RECORD>
    86.                 <OPCODE>OP_SET_PERMISSIONS</OPCODE>
    87.                 <DATA>
    88.                         <TXID>123</TXID>
    89.                         <SRC>/tmp/hadoop-yarn/staging</SRC>
    90.                         <MODE>511</MODE>
    91.                 </DATA>
    92.         </RECORD>
    93.         <RECORD>
    94.                 <OPCODE>OP_SET_PERMISSIONS</OPCODE>
    95.                 <DATA>
    96.                         <TXID>124</TXID>
    97.                         <SRC>/tmp/hadoop-yarn/staging/history</SRC>
    98.                         <MODE>511</MODE>
    99.                 </DATA>
    100.         </RECORD>
    101.         <RECORD>
    102.                 <OPCODE>OP_SET_PERMISSIONS</OPCODE>
    103.                 <DATA>
    104.                         <TXID>125</TXID>
    105.                         <SRC>/tmp/hadoop-yarn/staging/history/done</SRC>
    106.             <MODE>511</MODE>
    107.                 </DATA>
    108. </RECORD>
    109. <RECORD>
    110.         <OPCODE>OP_SET_PERMISSIONS</OPCODE>
    111.         <DATA>
    112.                 <TXID>126</TXID>
    113.                 <SRC>/tmp/hadoop-yarn/staging/history/done/2020</SRC>
    114.         <MODE>511</MODE>
    115.         </DATA>
    116. </RECORD>
    117. <RECORD>
    复制代码
    备注:Edits中只记录了更新相关的操作,查询或者下载文件并不会记录在内!!
    问题:NameNode启动时如何确定加载哪些Edits文件呢?
    nn启动时需要加载fsimage文件以及那些没有被2nn进行合并的edits文件,nn如何判断哪些edits已经被合并了呢?
    可以通过fsimage文件自身的编号来确定哪些已经被合并。

1.5.6.3 checkpoint周期

[hdfs-default.xml]
  1. <property>
  2.         <name>dfs.namenode.checkpoint.period</name>
  3.         <value>3600</value>
  4. </property>
  5. <property>
  6.         <name>dfs.namenode.checkpoint.txns</name>
  7.         <value>1000000</value>
  8.         <description>操作动作次数</description>
  9. </property>
  10. <property>
  11.         <name>dfs.namenode.checkpoint.check.period</name>
  12.         <value>60</value>
  13.         <description>1分钟检查一次操作次数</description>
  14. </property>
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

杀鸡焉用牛刀

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表