000006 - HDFS NN和2NN工作机制

1 NameNode和2NameNode工作流程图

在这里插入图片描述
1)第一阶段:NameNode 启动
(1)第一次启动 NameNode 格式化后,创建 Fsimage 和 Edits 文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。
(2)客户端对元数据进行增删改的请求。
(3)NameNode 记录操作日志,更新滚动日志。
(4)NameNode 在内存中对元数据进行增删改。
2)第二阶段:Secondary NameNode 工作
(1)Secondary NameNode 询问 NameNode 是否需要 CheckPoint。直接带回 NameNode是否检查结果。
(2)Secondary NameNode 请求执行 CheckPoint。
(3)NameNode 滚动正在写的 Edits 日志。
(4)将滚动前的编辑日志和镜像文件拷贝到 Secondary NameNode。
(5)Secondary NameNode 加载编辑日志和镜像文件到内存,并合并。
(6)生成新的镜像文件 fsimage.chkpoint。
(7)拷贝 fsimage.chkpoint 到 NameNode。
(8)NameNode 将 fsimage.chkpoint 重新命名成 fsimage。

2 Fsimage 和 Edits 解析

NameNode被格式化之后,将在/opt/module/hadoop-3.1.3/data/dfs/name/current目录中产生如下文件
(1)Fsimage文件:HDFS文件系统元数据的一个永久性的检查点,其中包含HDFS文件系统的所有目录和文件inode的序列化信息。

fsimage_0000000000000000000
fsimage_0000000000000000000.md5
seen_txid
VERSION

(2)Edits文件:存放HDFS文件系统的所有更新操作的路径,文件系统客户端执行的所有写操作首先会被记录到Edits文件中。
(3)seen_txid文件保存的是一个数字,就是最后一个edits_的数字
(4)每次NameNode启动的时候都会将Fsimage文件读入内存,加 载Edits里面的更新操作,保证内存中的元数据信息是最新的、同步的,可以看成NameNode启动的时候就将Fsimage和Edits文件进行了合并。

我们使用oiv和oev可以分别查看Fsimage和Edits文件,帮助我么进一步理解。经过000004 - HDFS, 我们已经启动了hadoop集群,并且对HDFS进行了一些操作,因此接下来我们可以直接开始进行oev和oiv的操作实践。

1)oev 查看 Edits 文件
(1)基本语法

hdfs oev -p 文件类型 -i 编辑日志 -o 转换后文件输出路径

(2)执行命令

[jintao.zhang@Jintaos-MacBook-Pro]$ ssh -i "hadoop-instances-stack-key-pair.pem" ec2-user@13.211.147.164
[ec2-user@ip-192-168-0-101 ~]$ cd software_installation/hadoop-3.1.3/data/dfs/name/current/
[ec2-user@ip-192-168-0-101 current]$ ll
total 1040
-rw-rw-r--. 1 ec2-user ec2-user     217 Jul 16 14:27 VERSION
-rw-rw-r--. 1 ec2-user ec2-user 1048576 Jul 16 14:39 edits_inprogress_0000000000000000001
-rw-rw-r--. 1 ec2-user ec2-user     395 Jul 16 14:27 fsimage_0000000000000000000
-rw-rw-r--. 1 ec2-user ec2-user      62 Jul 16 14:27 fsimage_0000000000000000000.md5
-rw-rw-r--. 1 ec2-user ec2-user       2 Jul 16 14:27 seen_txid
[ec2-user@ip-192-168-0-101 current]$  hdfs oev -p XML -i edits_inprogress_0000000000000000001 -o /home/ec2-user/workspace/edits.xml
[ec2-user@ip-192-168-0-101 current]$

(3)下面是edits.xml文件的内容, 从中可以找到我们在过000004 - HDFS中不操作的记录。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<EDITS>
  <EDITS_VERSION>-64</EDITS_VERSION>
  <RECORD>
    <OPCODE>OP_START_LOG_SEGMENT</OPCODE>
    <DATA>
      <TXID>1</TXID>
    </DATA>
  </RECORD>
  <RECORD>
    <OPCODE>OP_MKDIR</OPCODE>
    <DATA>
      <TXID>2</TXID>
      <LENGTH>0</LENGTH>
      <INODEID>16386</INODEID>
      <PATH>/tmp</PATH>
      <TIMESTAMP>1721140090939</TIMESTAMP>
      <PERMISSION_STATUS>
        <USERNAME>ec2-user</USERNAME>
        <GROUPNAME>supergroup</GROUPNAME>
        <MODE>504</MODE>
      </PERMISSION_STATUS>
    </DATA>
  </RECORD>
  <RECORD>
    <OPCODE>OP_MKDIR</OPCODE>
    <DATA>
      <TXID>3</TXID>
      <LENGTH>0</LENGTH>
      <INODEID>16387</INODEID>
      <PATH>/tmp/hadoop-yarn</PATH>
      <TIMESTAMP>1721140090941</TIMESTAMP>
      <PERMISSION_STATUS>
        <USERNAME>ec2-user</USERNAME>
        <GROUPNAME>supergroup</GROUPNAME>
        <MODE>504</MODE>
      </PERMISSION_STATUS>
    </DATA>
  </RECORD>
  <RECORD>
    <OPCODE>OP_MKDIR</OPCODE>
    <DATA>
      <TXID>4</TXID>
      <LENGTH>0</LENGTH>
      <INODEID>16388</INODEID>
      <PATH>/tmp/hadoop-yarn/staging</PATH>
      <TIMESTAMP>1721140090941</TIMESTAMP>
      <PERMISSION_STATUS>
        <USERNAME>ec2-user</USERNAME>
        <GROUPNAME>supergroup</GROUPNAME>
        <MODE>504</MODE>
      </PERMISSION_STATUS>
    </DATA>
  </RECORD>
  <RECORD>
    <OPCODE>OP_MKDIR</OPCODE>
    <DATA>
      <TXID>5</TXID>
      <LENGTH>0</LENGTH>
      <INODEID>16389</INODEID>
      <PATH>/tmp/hadoop-yarn/staging/history</PATH>
      <TIMESTAMP>1721140090941</TIMESTAMP>
      <PERMISSION_STATUS>
        <USERNAME>ec2-user</USERNAME>
        <GROUPNAME>supergroup</GROUPNAME>
        <MODE>504</MODE>
      </PERMISSION_STATUS>
    </DATA>
  </RECORD>
  <RECORD>
    <OPCODE>OP_MKDIR</OPCODE>
    <DATA>
      <TXID>6</TXID>
      <LENGTH>0</LENGTH>
      <INODEID>16390</INODEID>
      <PATH>/tmp/hadoop-yarn/staging/history/done</PATH>
      <TIMESTAMP>1721140090942</TIMESTAMP>
      <PERMISSION_STATUS>
        <USERNAME>ec2-user</USERNAME>
        <GROUPNAME>supergroup</GROUPNAME>
        <MODE>504</MODE>
      </PERMISSION_STATUS>
    </DATA>
  </RECORD>
  <RECORD>
    <OPCODE>OP_MKDIR</OPCODE>
    <DATA>
      <TXID>7</TXID>
      <LENGTH>0</LENGTH>
      <INODEID>16391</INODEID>
      <PATH>/tmp/hadoop-yarn/staging/history/done_intermediate</PATH>
      <TIMESTAMP>1721140090985</TIMESTAMP>
      <PERMISSION_STATUS>
        <USERNAME>ec2-user</USERNAME>
        <GROUPNAME>supergroup</GROUPNAME>
        <MODE>493</MODE>
      </PERMISSION_STATUS>
    </DATA>
  </RECORD>
  <RECORD>
    <OPCODE>OP_SET_PERMISSIONS</OPCODE>
    <DATA>
      <TXID>8</TXID>
      <SRC>/tmp/hadoop-yarn/staging/history/done_intermediate</SRC>
      <MODE>1023</MODE>
    </DATA>
  </RECORD>
  <RECORD>
    <OPCODE>OP_MKDIR</OPCODE>
    <DATA>
      <TXID>9</TXID>
      <LENGTH>0</LENGTH>
      <INODEID>16392</INODEID>
      <PATH>/folder-for-test</PATH>
      <TIMESTAMP>1721140762712</TIMESTAMP>
      <PERMISSION_STATUS>
        <USERNAME>ec2-user</USERNAME>
        <GROUPNAME>supergroup</GROUPNAME>
        <MODE>493</MODE>
      </PERMISSION_STATUS>
    </DATA>
  </RECORD>
  <RECORD>
    <OPCODE>OP_ADD</OPCODE>
    <DATA>
      <TXID>10</TXID>
      <LENGTH>0</LENGTH>
      <INODEID>16393</INODEID>
      <PATH>/folder-for-test/upload-file-to-hdfs-test.txt</PATH>
      <REPLICATION>2</REPLICATION>
      <MTIME>1721140763390</MTIME>
      <ATIME>1721140763390</ATIME>
      <BLOCKSIZE>134217728</BLOCKSIZE>
      <CLIENT_NAME>DFSClient_NONMAPREDUCE_-496643430_26</CLIENT_NAME>
      <CLIENT_MACHINE>203.13.23.10</CLIENT_MACHINE>
      <OVERWRITE>true</OVERWRITE>
      <PERMISSION_STATUS>
        <USERNAME>ec2-user</USERNAME>
        <GROUPNAME>supergroup</GROUPNAME>
        <MODE>420</MODE>
      </PERMISSION_STATUS>
      <ERASURE_CODING_POLICY_ID>0</ERASURE_CODING_POLICY_ID>
      <RPC_CLIENTID>e5cbf485-118b-40ac-9c5a-bb9f22ebd18d</RPC_CLIENTID>
      <RPC_CALLID>2</RPC_CALLID>
    </DATA>
  </RECORD>
  <RECORD>
    <OPCODE>OP_ALLOCATE_BLOCK_ID</OPCODE>
    <DATA>
      <TXID>11</TXID>
      <BLOCK_ID>1073741825</BLOCK_ID>
    </DATA>
  </RECORD>
  <RECORD>
    <OPCODE>OP_SET_GENSTAMP_V2</OPCODE>
    <DATA>
      <TXID>12</TXID>
      <GENSTAMPV2>1001</GENSTAMPV2>
    </DATA>
  </RECORD>
  <RECORD>
    <OPCODE>OP_ADD_BLOCK</OPCODE>
    <DATA>
      <TXID>13</TXID>
      <PATH>/folder-for-test/upload-file-to-hdfs-test.txt</PATH>
      <BLOCK>
        <BLOCK_ID>1073741825</BLOCK_ID>
        <NUM_BYTES>0</NUM_BYTES>
        <GENSTAMP>1001</GENSTAMP>
      </BLOCK>
      <RPC_CLIENTID/>
      <RPC_CALLID>-2</RPC_CALLID>
    </DATA>
  </RECORD>
  <RECORD>
    <OPCODE>OP_CLOSE</OPCODE>
    <DATA>
      <TXID>14</TXID>
      <LENGTH>0</LENGTH>
      <INODEID>0</INODEID>
      <PATH>/folder-for-test/upload-file-to-hdfs-test.txt</PATH>
      <REPLICATION>2</REPLICATION>
      <MTIME>1721140765890</MTIME>
      <ATIME>1721140763390</ATIME>
      <BLOCKSIZE>134217728</BLOCKSIZE>
      <CLIENT_NAME/>
      <CLIENT_MACHINE/>
      <OVERWRITE>false</OVERWRITE>
      <BLOCK>
        <BLOCK_ID>1073741825</BLOCK_ID>
        <NUM_BYTES>98</NUM_BYTES>
        <GENSTAMP>1001</GENSTAMP>
      </BLOCK>
      <PERMISSION_STATUS>
        <USERNAME>ec2-user</USERNAME>
        <GROUPNAME>supergroup</GROUPNAME>
        <MODE>420</MODE>
      </PERMISSION_STATUS>
    </DATA>
  </RECORD>
  <RECORD>
    <OPCODE>OP_ADD</OPCODE>
    <DATA>
      <TXID>15</TXID>
      <LENGTH>0</LENGTH>
      <INODEID>16394</INODEID>
      <PATH>/folder-for-test/input.txt</PATH>
      <REPLICATION>2</REPLICATION>
      <MTIME>1721140766132</MTIME>
      <ATIME>1721140766132</ATIME>
      <BLOCKSIZE>134217728</BLOCKSIZE>
      <CLIENT_NAME>DFSClient_NONMAPREDUCE_-496643430_26</CLIENT_NAME>
      <CLIENT_MACHINE>203.13.23.10</CLIENT_MACHINE>
      <OVERWRITE>true</OVERWRITE>
      <PERMISSION_STATUS>
        <USERNAME>ec2-user</USERNAME>
        <GROUPNAME>supergroup</GROUPNAME>
        <MODE>420</MODE>
      </PERMISSION_STATUS>
      <ERASURE_CODING_POLICY_ID>0</ERASURE_CODING_POLICY_ID>
      <RPC_CLIENTID>e5cbf485-118b-40ac-9c5a-bb9f22ebd18d</RPC_CLIENTID>
      <RPC_CALLID>6</RPC_CALLID>
    </DATA>
  </RECORD>
  <RECORD>
    <OPCODE>OP_ALLOCATE_BLOCK_ID</OPCODE>
    <DATA>
      <TXID>16</TXID>
      <BLOCK_ID>1073741826</BLOCK_ID>
    </DATA>
  </RECORD>
  <RECORD>
    <OPCODE>OP_SET_GENSTAMP_V2</OPCODE>
    <DATA>
      <TXID>17</TXID>
      <GENSTAMPV2>1002</GENSTAMPV2>
    </DATA>
  </RECORD>
  <RECORD>
    <OPCODE>OP_ADD_BLOCK</OPCODE>
    <DATA>
      <TXID>18</TXID>
      <PATH>/folder-for-test/input.txt</PATH>
      <BLOCK>
        <BLOCK_ID>1073741826</BLOCK_ID>
        <NUM_BYTES>0</NUM_BYTES>
        <GENSTAMP>1002</GENSTAMP>
      </BLOCK>
      <RPC_CLIENTID/>
      <RPC_CALLID>-2</RPC_CALLID>
    </DATA>
  </RECORD>
  <RECORD>
    <OPCODE>OP_CLOSE</OPCODE>
    <DATA>
      <TXID>19</TXID>
      <LENGTH>0</LENGTH>
      <INODEID>0</INODEID>
      <PATH>/folder-for-test/input.txt</PATH>
      <REPLICATION>2</REPLICATION>
      <MTIME>1721140767591</MTIME>
      <ATIME>1721140766132</ATIME>
      <BLOCKSIZE>134217728</BLOCKSIZE>
      <CLIENT_NAME/>
      <CLIENT_MACHINE/>
      <OVERWRITE>false</OVERWRITE>
      <BLOCK>
        <BLOCK_ID>1073741826</BLOCK_ID>
        <NUM_BYTES>11</NUM_BYTES>
        <GENSTAMP>1002</GENSTAMP>
      </BLOCK>
      <PERMISSION_STATUS>
        <USERNAME>ec2-user</USERNAME>
        <GROUPNAME>supergroup</GROUPNAME>
        <MODE>420</MODE>
      </PERMISSION_STATUS>
    </DATA>
  </RECORD>
  <RECORD>
    <OPCODE>OP_RENAME_OLD</OPCODE>
    <DATA>
      <TXID>20</TXID>
      <LENGTH>0</LENGTH>
      <SRC>/folder-for-test</SRC>
      <DST>/renamed-folder-for-test</DST>
      <TIMESTAMP>1721140769786</TIMESTAMP>
      <RPC_CLIENTID>40cd6c17-44fc-436c-b929-d3b8d59c778e</RPC_CLIENTID>
      <RPC_CALLID>12</RPC_CALLID>
    </DATA>
  </RECORD>
</EDITS>

2)oiv 查看 Fsimage 文件
(1)基本语法

hdfs oiv -p 文件类型 -i 镜像文件 -o 转换后文件输出路径

(2)因为新启动的hadoop集群的Fsimage内没有记录任何操作,已经执行过的少量操作都还在Edits文件中,没有进行Checkpoint操作,因此直接使用oiv查看Fsimage是看不到任何操作记录的。所以这一步我们要先手动出发CheckPoint操作

[jintao.zhang@Jintaos-MacBook-Pro]$ ssh -i "hadoop-instances-stack-key-pair.pem" ec2-user@13.211.147.164
[ec2-user@ip-192-168-0-101 ~]$ cd software_installation/hadoop-3.1.3/data/dfs/name/current/
[ec2-user@ip-192-168-0-101 current]$ ll
total 1040
-rw-rw-r--. 1 ec2-user ec2-user     217 Jul 16 14:27 VERSION
-rw-rw-r--. 1 ec2-user ec2-user 1048576 Jul 16 14:39 edits_inprogress_0000000000000000001
-rw-rw-r--. 1 ec2-user ec2-user     395 Jul 16 14:27 fsimage_0000000000000000000
-rw-rw-r--. 1 ec2-user ec2-user      62 Jul 16 14:27 fsimage_0000000000000000000.md5
-rw-rw-r--. 1 ec2-user ec2-user       2 Jul 16 14:27 seen_txid
[ec2-user@ip-192-168-0-101 current]$ hdfs dfsadmin -safemode enter
Safe mode is ON
[ec2-user@ip-192-168-0-101 current]$ hdfs dfsadmin -saveNamespace
Save namespace successful
[ec2-user@ip-192-168-0-101 current]$ hdfs dfsadmin -safemode leave
Safe mode is OFF
[ec2-user@ip-192-168-0-101 current]$ ll
total 1052
-rw-rw-r--. 1 ec2-user ec2-user     217 Jul 16 14:51 VERSION
-rw-rw-r--. 1 ec2-user ec2-user    1790 Jul 16 14:51 edits_0000000000000000001-0000000000000000021
-rw-rw-r--. 1 ec2-user ec2-user 1048576 Jul 16 14:51 edits_inprogress_0000000000000000022
-rw-rw-r--. 1 ec2-user ec2-user     395 Jul 16 14:27 fsimage_0000000000000000000
-rw-rw-r--. 1 ec2-user ec2-user      62 Jul 16 14:27 fsimage_0000000000000000000.md5
-rw-rw-r--. 1 ec2-user ec2-user    1046 Jul 16 14:51 fsimage_0000000000000000021
-rw-rw-r--. 1 ec2-user ec2-user      62 Jul 16 14:51 fsimage_0000000000000000021.md5
-rw-rw-r--. 1 ec2-user ec2-user       3 Jul 16 14:51 seen_txid
[ec2-user@ip-192-168-0-101 current]$ cat seen_txid
22

可以看到,出发CheckPoint操作后,产生了一个新的edits_inprogressfsimage文件, 从seen_txid可以看到,当前生效的edits文件是以22结束的。最新的 fsimage 文件通常会有最大的编号。
(3)接下来执行下面命令查看最新的FSimage文件

[ec2-user@ip-192-168-0-101 current]$ ll
total 1052
-rw-rw-r--. 1 ec2-user ec2-user     217 Jul 16 14:51 VERSION
-rw-rw-r--. 1 ec2-user ec2-user    1790 Jul 16 14:51 edits_0000000000000000001-0000000000000000021
-rw-rw-r--. 1 ec2-user ec2-user 1048576 Jul 16 14:51 edits_inprogress_0000000000000000022
-rw-rw-r--. 1 ec2-user ec2-user     395 Jul 16 14:27 fsimage_0000000000000000000
-rw-rw-r--. 1 ec2-user ec2-user      62 Jul 16 14:27 fsimage_0000000000000000000.md5
-rw-rw-r--. 1 ec2-user ec2-user    1046 Jul 16 14:51 fsimage_0000000000000000021
-rw-rw-r--. 1 ec2-user ec2-user      62 Jul 16 14:51 fsimage_0000000000000000021.md5
-rw-rw-r--. 1 ec2-user ec2-user       3 Jul 16 14:51 seen_txid
[ec2-user@ip-192-168-0-101 current]$ hdfs oiv -p XML -i fsimage_0000000000000000021 -o /home/ec2-user/workspace/fsimage_0000000000000000021.xml
2024-07-16 14:56:01,356 INFO offlineImageViewer.FSImageHandler: Loading 3 strings

(4)fsimage_0000000000000000021.xml文件内容如下,从中可以看到上一步Edits中的所有操作均已合并至了最新的Fsimage上,同时也可以看出来,Fsimage是合并后的最终状态,并不包含操作过程。Fsimage中包含了文件的层级结构以及文件块信息,但是并不包含某个文件块的存储位置信息,存储位置信息是由DateNode上报给NameNode的。

<?xml version="1.0"?>
<fsimage>
	<version>
		<layoutVersion>-64</layoutVersion>
		<onDiskVersion>1</onDiskVersion>
		<oivRevision>ba631c436b806728f8ec2f54ab1e289526c90579</oivRevision>
	</version>
	<NameSection>
		<namespaceId>1022385255</namespaceId>
		<genstampV1>1000</genstampV1>
		<genstampV2>1002</genstampV2>
		<genstampV1Limit>0</genstampV1Limit>
		<lastAllocatedBlockId>1073741826</lastAllocatedBlockId>
		<txid>21</txid>
	</NameSection>
	<ErasureCodingSection>
		<erasureCodingPolicy>
			<policyId>1</policyId>
			<policyName>RS-6-3-1024k</policyName>
			<cellSize>1048576</cellSize>
			<policyState>DISABLED</policyState>
			<ecSchema>
				<codecName>rs</codecName>
				<dataUnits>6</dataUnits>
				<parityUnits>3</parityUnits>
			</ecSchema>
		</erasureCodingPolicy>
		<erasureCodingPolicy>
			<policyId>2</policyId>
			<policyName>RS-3-2-1024k</policyName>
			<cellSize>1048576</cellSize>
			<policyState>DISABLED</policyState>
			<ecSchema>
				<codecName>rs</codecName>
				<dataUnits>3</dataUnits>
				<parityUnits>2</parityUnits>
			</ecSchema>
		</erasureCodingPolicy>
		<erasureCodingPolicy>
			<policyId>3</policyId>
			<policyName>RS-LEGACY-6-3-1024k</policyName>
			<cellSize>1048576</cellSize>
			<policyState>DISABLED</policyState>
			<ecSchema>
				<codecName>rs-legacy</codecName>
				<dataUnits>6</dataUnits>
				<parityUnits>3</parityUnits>
			</ecSchema>
		</erasureCodingPolicy>
		<erasureCodingPolicy>
			<policyId>4</policyId>
			<policyName>XOR-2-1-1024k</policyName>
			<cellSize>1048576</cellSize>
			<policyState>DISABLED</policyState>
			<ecSchema>
				<codecName>xor</codecName>
				<dataUnits>2</dataUnits>
				<parityUnits>1</parityUnits>
			</ecSchema>
		</erasureCodingPolicy>
		<erasureCodingPolicy>
			<policyId>5</policyId>
			<policyName>RS-10-4-1024k</policyName>
			<cellSize>1048576</cellSize>
			<policyState>DISABLED</policyState>
			<ecSchema>
				<codecName>rs</codecName>
				<dataUnits>10</dataUnits>
				<parityUnits>4</parityUnits>
			</ecSchema>
		</erasureCodingPolicy>
	</ErasureCodingSection>
	<INodeSection>
		<lastInodeId>16394</lastInodeId>
		<numInodes>10</numInodes>
		<inode>
			<id>16385</id>
			<type>DIRECTORY</type>
			<name></name>
			<mtime>1721140769786</mtime>
			<permission>ec2-user:supergroup:0755</permission>
			<nsquota>9223372036854775807</nsquota>
			<dsquota>-1</dsquota>
		</inode>
		<inode>
			<id>16386</id>
			<type>DIRECTORY</type>
			<name>tmp</name>
			<mtime>1721140090941</mtime>
			<permission>ec2-user:supergroup:0770</permission>
			<nsquota>-1</nsquota>
			<dsquota>-1</dsquota>
		</inode>
		<inode>
			<id>16387</id>
			<type>DIRECTORY</type>
			<name>hadoop-yarn</name>
			<mtime>1721140090941</mtime>
			<permission>ec2-user:supergroup:0770</permission>
			<nsquota>-1</nsquota>
			<dsquota>-1</dsquota>
		</inode>
		<inode>
			<id>16388</id>
			<type>DIRECTORY</type>
			<name>staging</name>
			<mtime>1721140090941</mtime>
			<permission>ec2-user:supergroup:0770</permission>
			<nsquota>-1</nsquota>
			<dsquota>-1</dsquota>
		</inode>
		<inode>
			<id>16389</id>
			<type>DIRECTORY</type>
			<name>history</name>
			<mtime>1721140090985</mtime>
			<permission>ec2-user:supergroup:0770</permission>
			<nsquota>-1</nsquota>
			<dsquota>-1</dsquota>
		</inode>
		<inode>
			<id>16390</id>
			<type>DIRECTORY</type>
			<name>done</name>
			<mtime>1721140090942</mtime>
			<permission>ec2-user:supergroup:0770</permission>
			<nsquota>-1</nsquota>
			<dsquota>-1</dsquota>
		</inode>
		<inode>
			<id>16391</id>
			<type>DIRECTORY</type>
			<name>done_intermediate</name>
			<mtime>1721140090985</mtime>
			<permission>ec2-user:supergroup:1777</permission>
			<nsquota>-1</nsquota>
			<dsquota>-1</dsquota>
		</inode>
		<inode>
			<id>16392</id>
			<type>DIRECTORY</type>
			<name>renamed-folder-for-test</name>
			<mtime>1721140766132</mtime>
			<permission>ec2-user:supergroup:0755</permission>
			<nsquota>-1</nsquota>
			<dsquota>-1</dsquota>
		</inode>
		<inode>
			<id>16393</id>
			<type>FILE</type>
			<name>upload-file-to-hdfs-test.txt</name>
			<replication>2</replication>
			<mtime>1721140765890</mtime>
			<atime>1721140763390</atime>
			<preferredBlockSize>134217728</preferredBlockSize>
			<permission>ec2-user:supergroup:0644</permission>
			<blocks>
				<block>
					<id>1073741825</id>
					<genstamp>1001</genstamp>
					<numBytes>98</numBytes>
				</block>
			</blocks>
			<storagePolicyId>0</storagePolicyId>
		</inode>
		<inode>
			<id>16394</id>
			<type>FILE</type>
			<name>input.txt</name>
			<replication>2</replication>
			<mtime>1721140767591</mtime>
			<atime>1721140766132</atime>
			<preferredBlockSize>134217728</preferredBlockSize>
			<permission>ec2-user:supergroup:0644</permission>
			<blocks>
				<block>
					<id>1073741826</id>
					<genstamp>1002</genstamp>
					<numBytes>11</numBytes>
				</block>
			</blocks>
			<storagePolicyId>0</storagePolicyId>
		</inode>
	</INodeSection>
	<INodeReferenceSection></INodeReferenceSection>
	<SnapshotSection>
		<snapshotCounter>0</snapshotCounter>
		<numSnapshots>0</numSnapshots>
	</SnapshotSection>
	<INodeDirectorySection>
		<directory>
			<parent>16385</parent>
			<child>16392</child>
			<child>16386</child>
		</directory>
		<directory>
			<parent>16386</parent>
			<child>16387</child>
		</directory>
		<directory>
			<parent>16387</parent>
			<child>16388</child>
		</directory>
		<directory>
			<parent>16388</parent>
			<child>16389</child>
		</directory>
		<directory>
			<parent>16389</parent>
			<child>16390</child>
			<child>16391</child>
		</directory>
		<directory>
			<parent>16392</parent>
			<child>16394</child>
			<child>16393</child>
		</directory>
	</INodeDirectorySection>
	<FileUnderConstructionSection></FileUnderConstructionSection>
	<SecretManagerSection>
		<currentId>0</currentId>
		<tokenSequenceNumber>0</tokenSequenceNumber>
		<numDelegationKeys>0</numDelegationKeys>
		<numTokens>0</numTokens>
	</SecretManagerSection>
	<CacheManagerSection>
		<nextDirectiveId>1</nextDirectiveId>
		<numDirectives>0</numDirectives>
		<numPools>0</numPools>
	</CacheManagerSection>
</fsimage>

3 Hadoop_HDFS_检查点时间设置

还记得我们在执行1.2 oiv 查看 Fsimage 文件时,我们需要手动触发CheckPoint操作,那么CheckPoint操作的默认执行周期和触发时机是什么呢?
1)通常情况下,SecondaryNameNode 每隔一小时执行一次。其配置在[hdfs-default.xml]中

<property>
 <name>dfs.namenode.checkpoint.period</name>
 <value>3600s</value>
</property>

2)一分钟检查一次操作次数,当操作次数达到 1 百万时,SecondaryNameNode 执行一次。

<property>
<name>dfs.namenode.checkpoint.txns</name>
 <value>1000000</value>
<description>操作动作次数</description>
</property>
<property>
 <name>dfs.namenode.checkpoint.check.period</name>
 <value>60s</value>
<description> 1 分钟检查一次操作次数</description>
</property>
### 回答1: Hadoop是一个分布式存储和计算系统。它由一组节点组成,每个节点都有存储和计算功能。 Hadoop中有两种节点:NameNode和DataNode。 NameNodeHadoop的管理节点,负责维护文件系统的元数据,即文件名、块位置、块大小等信息。它还负责维护文件系统的命名空间,即文件目录结构。 DataNodeHadoop的存储节点,负责存储文件的实际数据块。它接收来自NameNode的命令,将数据块写入磁盘,并在需要时将数据块读取出来。 Hadoop中还有一个组件:SecondaryNameNode。它的作用是定期从NameNode拉取元数据的副本,并与NameNode进行同步。如果NameNode出现故障,可以使用SecondaryNameNode上的元数据副本来恢复。 简而言之,NameNode负责文件系统的元数据管理和命名空间维护,DataNode负责存储文件的实际数据块,SecondaryNameNode负责与NameNode的元数据同步。 ### 回答2: Hadoop中的NameNodeNN)和SecondaryNameNode2NN)是HDFS(分布式文件系统)的重要组件,它们都承担着维护文件系统元数据的责任,但在工作原理上有所不同。 NameNodeHDFS的主节点,它负责管理文件系统的命名空间和其它重要的元数据信息。当客户端请求执行某个文件操作时,首先会与NameNode通信,NameNode会返回相应的数据块所在的DataNode列表,然后客户端才能与对应的DataNode进行通信。NameNode还记录了文件的层次结构、文件块的位置、复本数量以及各个DataNode的健康状况等信息。NameNode将元数据信息存储在内存中,并定期将其持久化到本地磁盘以防止系统故障时的数据损失。因此,NameNode工作可简单概括为处理元数据请求、维护文件系统结构、存储数据块位置信息。 SecondaryNameNode(或者称为CheckpointNode)并不是NameNode的替代物,仅用于辅助NameNode进行元数据的备份和合并。SecondaryNameNode根据预定的时间间隔或事务数目,从主节点中得到元数据的快照,并将其存储在本地文件系统上。这样就可以在主节点出现故障的情况下,通过使用SecondaryNameNode上的快照信息来恢复主节点。此外,SecondaryNameNode还负责合并NameNode的编辑日志,将内存中的元数据信息与编辑日志中存储的增量变更合并,减轻了NameNode的元数据负担。 综上所述,NameNodeHadoop中负责管理文件系统元数据的主节点,而SecondaryNameNode则是辅助NameNode进行备份和合并工作的节点。它们的工作原理是相辅相成的,共同维护HDFS的可靠性和高可用性,在大规模数据存储和处理的分布式环境中起到了关键的作用。 ### 回答3: Hadoop中的NN(NameNode)和2NN(Secondary NameNode)是Hadoop分布式文件系统(HDFS)中的关键组件,它们共同协同工作来保障数据的高可用性和数据一致性。 NNHDFS的主节点,负责存储和管理文件系统的元数据信息,包括文件和目录的命名空间、块到数据节点的映射关系等。NN也负责处理客户端的文件操作请求,例如文件的读写、创建和删除等。NN将元数据以文件(fsimage)和编辑日志(edits)的形式存储在本地磁盘上。NN工作原理如下: 1. 当客户端发起文件写入请求时,NN接收到请求后会先将文件的元数据记录到内存中,并返回给客户端一个文件写入路径。 2. 当客户端结束文件写入后,NN将文件划分为固定大小的数据块,并记录下每个数据块所在的数据节点信息。 3. 当客户端请求文件读取时,NN根据文件元数据信息获取到数据块的位置,并返回给客户端所需的数据节点信息。 2NNNN的辅助节点,它主要用来定期合并NN的文件系统元数据和编辑日志,生成新的文件系统镜像(fsimage)和编辑日志快照(edits),以便在NN发生故障时进行故障恢复。2NN工作原理如下: 1. 2NN定期从NN获取文件系统的编辑日志,并将这些编辑日志合并到之前的镜像文件上,生成新的文件系统镜像和编辑日志快照。 2. 当NN发生故障时,2NN可以用其最新的文件系统镜像和编辑日志快照来帮助恢复NN,以保障文件系统的高可用性。 总结来说,NN负责管理HDFS的文件系统元数据信息和处理客户端的文件操作请求,2NN则负责定期合并NN的元数据信息和编辑日志,以备份和恢复NN的故障。通过NN2NN的协同工作Hadoop能够提供高可用性的分布式文件存储和处理服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值