You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ozone.apache.org by GitBox <gi...@apache.org> on 2020/12/14 06:10:00 UTC

[GitHub] [ozone] sky76093016 commented on a change in pull request #1633: HDDS-4516. [Doc] Add zh translation to Recon Architecture

sky76093016 commented on a change in pull request #1633:
URL: https://github.com/apache/ozone/pull/1633#discussion_r542120876



##########
File path: hadoop-hdds/docs/content/concept/Recon.zh.md
##########
@@ -0,0 +1,117 @@
+---
+title: "Recon"
+date: "2020-10-27"
+weight: 8
+menu: 
+  main:
+     parent: 概念
+summary: Recon 作为 Ozone 的管理和监视控制台。
+---
+<!---
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+Recon 充当 Ozone 的管理和监视控制台。它提供了 Ozone 的鸟瞰图,并通过基于 REST 的 API 和丰富的网页用户界面(Web UI)展示了集群的当前状态,从而帮助用户解决了任何问题。

Review comment:
       Solved it

##########
File path: hadoop-hdds/docs/content/interface/ReconApi.zh.md
##########
@@ -0,0 +1,498 @@
+---
+title: Recon API
+weight: 4
+menu:
+   main:
+      parent: "编程接口"
+summary: Recon 服务器支持 HTTP 端点,以帮助故障排除和监听 Ozone 集群。
+---
+
+<!---
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+Recon API v1 是一组 HTTP 端点,可以帮助您了解 Ozone 集群的当前状态,并在需要时进行故障排除。
+
+### HTTP 端点
+
+#### 容器
+
+* **/containers**
+
+    **URL 结构**
+    ```
+    GET /api/v1/containers
+    ```
+
+    **参数**
+
+    * prevKey (可选)
+    
+        只回传ID大于给定的prevKey的容器。
+        范例:prevKey=1
+
+    * limit (可选)
+    
+        只回传有限数量的结果。默认限制是1000。
+    
+    **回传**
+    
+    回传所有 ContainerMetadata 对象。
+    
+    ```json
+    {
+      "data": {
+        "totalCount": 3,
+        "containers": [
+          {
+            "ContainerID": 1,
+            "NumberOfKeys": 834
+          },
+          {
+            "ContainerID": 2,
+            "NumberOfKeys": 833
+          },
+          {
+            "ContainerID": 3,
+            "NumberOfKeys": 833
+          }
+        ]
+      }
+    }
+    ```
+
+* **/containers/:id/keys**
+
+    **URL 结构**
+    ```
+    GET /api/v1/containers/:id/keys
+    ```
+    
+    **参数**
+    
+    * prevKey (可选)
+     
+        只回传在给定的 prevKey 键前缀之后的键。
+        范例:prevKey=/vol1/bucket1/key1
+        
+    * limit (可选)
+    
+        只回传有限数量的结果。默认限制是1000。
+        
+    **回传**
+    
+    回传给定容器 ID 的所有 KeyMetadata 对象。
+    
+    ```json
+    {
+      "totalCount":7,
+      "keys": [
+        {
+          "Volume":"vol-1-73141",
+          "Bucket":"bucket-3-35816",
+          "Key":"key-0-43637",
+          "DataSize":1000,
+          "Versions":[0],
+          "Blocks": {
+            "0": [
+              {
+                "containerID":1,
+                "localID":105232659753992201
+              }
+            ]
+          },
+          "CreationTime":"2020-11-18T18:09:17.722Z",
+          "ModificationTime":"2020-11-18T18:09:30.405Z"
+        },
+        ...
+      ]
+    }
+    ```
+* **/containers/missing**
+    
+    **URL 结构**
+    ```
+    GET /api/v1/containers/missing
+    ```
+    
+    **参数**
+    
+    没有参数。
+    
+    **回传**
+    
+    回传所有丢失容器的 MissingContainerMetadata 对象。
+    
+    ```json
+    {
+    	"totalCount": 26,
+    	"containers": [{
+    		"containerID": 1,
+    		"missingSince": 1605731029145,
+    		"keys": 7,
+    		"pipelineID": "88646d32-a1aa-4e1a",
+    		"replicas": [{
+    			"containerId": 1,
+    			"datanodeHost": "localhost-1",
+    			"firstReportTimestamp": 1605724047057,
+    			"lastReportTimestamp": 1605731201301
+    		}, 
+            ...
+            ]
+    	},
+        ...
+        ]
+    }
+    ```
+* **/containers/:id/replicaHistory**
+
+    **URL 结构**
+    ```
+    GET /api/v1/containers/:id/replicaHistory
+    ```
+    
+    **参数**
+    
+    没有参数。
+    
+    **回传**
+
+    回传给定容器 ID 的所有 ContainerHistory 对象。
+    
+    ```json
+    [
+      {
+        "containerId": 1,
+        "datanodeHost": "localhost-1",
+        "firstReportTimestamp": 1605724047057,
+        "lastReportTimestamp": 1605730421294
+      },
+      ...
+    ]
+    ```
+* **/containers/unhealthy**
+
+    **URL 结构**
+     ```
+     GET /api/v1/containers/unhealthy
+     ```
+     
+    **参数**
+    
+    * batchNum (可选)
+
+        回传结果的批号(如“页码”)。
+        传递1,将回传记录1以限制。传递2,将回传limit + 1 to 2 * limit,等等。
+        
+    * limit (可选)
+    
+        只回传有限数量的结果。默认限制是1000。
+        
+    **回传**
+    
+    回传所有不健康容器的 UnhealthyContainerMetadata 对象。
+    
+     ```json
+     {
+     	"missingCount": 2,
+     	"underReplicatedCount": 0,
+     	"overReplicatedCount": 0,
+     	"misReplicatedCount": 0,
+     	"containers": [{
+     		"containerID": 1,
+     		"containerState": "MISSING",
+     		"unhealthySince": 1605731029145,
+     		"expectedReplicaCount": 3,
+     		"actualReplicaCount": 0,
+     		"replicaDeltaCount": 3,
+     		"reason": null,
+     		"keys": 7,
+     		"pipelineID": "88646d32-a1aa-4e1a",
+     		"replicas": [{
+     			"containerId": 1,
+     			"datanodeHost": "localhost-1",
+     			"firstReportTimestamp": 1605722960125,
+     			"lastReportTimestamp": 1605731230509
+     		}, 
+            ...
+            ]
+     	},
+        ...
+        ]
+     } 
+     ```
+     
+* **/containers/unhealthy/:state**
+
+    **URL 结构**
+    ```
+    GET /api/v1/containers/unhealthy/:state
+    ```
+     
+    **参数**
+    
+    * batchNum (可选)
+    
+        回传结果的批号(如“页码”)。
+        传递1,将回传记录1以限制。传递2,将回传limit + 1 to 2 * limit,等等。
+        
+    * limit (可选)
+    
+        只回传有限数量的结果。默认限制是1000。
+        
+    **回传**
+    
+    回传处于给定状态的容器的 UnhealthyContainerMetadata 对象。
+    可能有不健康的容器状态为`MISSING`, `MIS_REPLICATED`, `UNDER_REPLICATED`, `OVER_REPLICATED`.
+    响应结构与`/containers/unhealthy`相同
+    
+#### 集群状态
+
+* **/clusterState**
+
+    **URL 结构**
+    ```
+    GET /api/v1/clusterState
+    ```
+     
+    **参数**
+    
+    没有参数。
+    
+    **回传**
+    
+    返回 Ozone 集群当前状态的摘要。
+    
+     ```json
+     {
+     	"pipelines": 5,
+     	"totalDatanodes": 4,
+     	"healthyDatanodes": 4,
+     	"storageReport": {
+     		"capacity": 1081719668736,
+     		"used": 1309212672,
+     		"remaining": 597361258496
+     	},
+     	"containers": 26,
+     	"volumes": 6,
+     	"buckets": 26,
+     	"keys": 25
+     }
+     ```
+     
+#### 数据节点
+
+* **/datanodes**
+
+    **URL 结构**
+    ```
+    GET /api/v1/datanodes
+    ```
+    
+    **参数**
+    
+    没有参数。
+    
+    **回传**
+    
+    回传集群中的所有数据节点。
+    
+    ```json
+    {
+     	"totalCount": 4,
+     	"datanodes": [{
+     		"uuid": "f8f8cb45-3ab2-4123",
+     		"hostname": "localhost-1",
+     		"state": "HEALTHY",
+     		"lastHeartbeat": 1605738400544,
+     		"storageReport": {
+     			"capacity": 270429917184,
+     			"used": 358805504,
+     			"remaining": 119648149504
+     		},
+     		"pipelines": [{
+     			"pipelineID": "b9415b20-b9bd-4225",
+     			"replicationType": "RATIS",
+     			"replicationFactor": 3,
+     			"leaderNode": "localhost-2"
+     		}, {
+     			"pipelineID": "3bf4a9e9-69cc-4d20",
+     			"replicationType": "RATIS",
+     			"replicationFactor": 1,
+     			"leaderNode": "localhost-1"
+     		}],
+     		"containers": 17,
+     		"leaderCount": 1
+     	},
+        ...
+        ]
+     }
+     ```
+     
+#### 管道
+
+* **/pipelines**
+
+    **URL 结构**
+    ```
+    GET /api/v1/pipelines
+    ```
+    **参数**
+    
+    没有参数
+    
+    **回传**
+    
+    回传在集群中的所有管道
+    
+    ```json
+     {
+     	"totalCount": 5,
+     	"pipelines": [{
+     		"pipelineId": "b9415b20-b9bd-4225",
+     		"status": "OPEN",
+     		"leaderNode": "localhost-1",
+     		"datanodes": ["localhost-1", "localhost-2", "localhost-3"],
+     		"lastLeaderElection": 0,
+     		"duration": 23166128,
+     		"leaderElections": 0,
+     		"replicationType": "RATIS",
+     		"replicationFactor": 3,
+     		"containers": 0
+     	},
+        ...
+        ]
+     }
+     ```  
+
+#### 任务
+
+* **/task/status**
+
+    **URL 结构**
+    ```
+    GET /api/v1/task/status
+    ```
+    
+    **参数**
+    
+    没有参数
+    
+    **回传**
+    
+    回传所有 Recon 任务的状态。
+  
+    ```json
+     [
+       {
+     	"taskName": "OmDeltaRequest",
+     	"lastUpdatedTimestamp": 1605724099147,
+     	"lastUpdatedSeqNumber": 186
+       },
+       ...
+     ]
+    ```
+    
+#### 使用率
+
+* **/utilization/fileCount**
+
+    **URL 结构**
+    ```
+    GET /api/v1/utilization/fileCount
+    ```
+    
+    **参数**
+    
+    * volume (可选)
+    
+        根据给定的卷名过滤结果。
+        
+    * bucket (可选)
+    
+        根据给定的桶名过滤结果。
+        
+    * fileSize (可选)
+
+        根据给定的文件大小筛选结果。
+        
+    **回传**
+    
+    回传不同文件范围内的文件计数,其中响应对象中的`fileSize`是文件大小范围的上限。
+    
+    ```json
+     [{
+     	"volume": "vol-2-04168",
+     	"bucket": "bucket-0-11685",
+     	"fileSize": 1024,
+     	"count": 1
+     }, {
+     	"volume": "vol-2-04168",
+     	"bucket": "bucket-1-41795",
+     	"fileSize": 1024,
+     	"count": 1
+     }, {
+     	"volume": "vol-2-04168",
+     	"bucket": "bucket-2-93377",
+     	"fileSize": 1024,
+     	"count": 1
+     }, {
+     	"volume": "vol-2-04168",
+     	"bucket": "bucket-3-50336",
+     	"fileSize": 1024,
+     	"count": 2
+     }]
+    ```
+    
+#### <a name="metrics"></a> 指标
+
+* **/metrics/:api**
+
+    **URL 结构**
+    ```
+    GET /api/v1/metrics/:api
+    ```
+    
+    **参数**
+    

Review comment:
       Solved it

##########
File path: hadoop-hdds/docs/content/concept/Recon.zh.md
##########
@@ -0,0 +1,117 @@
+---
+title: "Recon"
+date: "2020-10-27"
+weight: 8
+menu: 
+  main:
+     parent: 概念
+summary: Recon 作为 Ozone 的管理和监视控制台。
+---
+<!---
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+Recon 充当 Ozone 的管理和监视控制台。它提供了 Ozone 的鸟瞰图,并通过基于 REST 的 API 和丰富的网页用户界面(Web UI)展示了集群的当前状态,从而帮助用户解决了任何问题。
+
+
+## 高层次设计
+
+{{<figure src="/concept/ReconHighLevelDesign.png" width="800px">}}
+
+<br/>
+
+在较高的层次上,Recon 从 Ozone Manager(OM)收集和汇总元数据,Storage Container Manager(SCM)和 Datanodes(DN)充当中央管理和监视控制台。Ozone 管理员可以使用 Recon 查询系统的当前状态,而不会使 OM  或 SCM 过载。

Review comment:
       Solved it

##########
File path: hadoop-hdds/docs/content/interface/ReconApi.zh.md
##########
@@ -0,0 +1,498 @@
+---
+title: Recon API
+weight: 4
+menu:
+   main:
+      parent: "编程接口"
+summary: Recon 服务器支持 HTTP 端点,以帮助故障排除和监听 Ozone 集群。
+---
+
+<!---
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+Recon API v1 是一组 HTTP 端点,可以帮助您了解 Ozone 集群的当前状态,并在需要时进行故障排除。
+
+### HTTP 端点
+
+#### 容器
+
+* **/containers**
+
+    **URL 结构**
+    ```
+    GET /api/v1/containers
+    ```
+
+    **参数**
+
+    * prevKey (可选)
+    
+        只回传ID大于给定的prevKey的容器。
+        范例:prevKey=1
+
+    * limit (可选)
+    
+        只回传有限数量的结果。默认限制是1000。
+    
+    **回传**
+    
+    回传所有 ContainerMetadata 对象。
+    
+    ```json
+    {
+      "data": {
+        "totalCount": 3,
+        "containers": [
+          {
+            "ContainerID": 1,
+            "NumberOfKeys": 834
+          },
+          {
+            "ContainerID": 2,
+            "NumberOfKeys": 833
+          },
+          {
+            "ContainerID": 3,
+            "NumberOfKeys": 833
+          }
+        ]
+      }
+    }
+    ```
+
+* **/containers/:id/keys**
+
+    **URL 结构**
+    ```
+    GET /api/v1/containers/:id/keys
+    ```
+    
+    **参数**
+    
+    * prevKey (可选)
+     
+        只回传在给定的 prevKey 键前缀之后的键。
+        范例:prevKey=/vol1/bucket1/key1
+        
+    * limit (可选)
+    
+        只回传有限数量的结果。默认限制是1000。
+        
+    **回传**
+    
+    回传给定容器 ID 的所有 KeyMetadata 对象。
+    
+    ```json
+    {
+      "totalCount":7,
+      "keys": [
+        {
+          "Volume":"vol-1-73141",
+          "Bucket":"bucket-3-35816",
+          "Key":"key-0-43637",
+          "DataSize":1000,
+          "Versions":[0],
+          "Blocks": {
+            "0": [
+              {
+                "containerID":1,
+                "localID":105232659753992201
+              }
+            ]
+          },
+          "CreationTime":"2020-11-18T18:09:17.722Z",
+          "ModificationTime":"2020-11-18T18:09:30.405Z"
+        },
+        ...
+      ]
+    }
+    ```
+* **/containers/missing**
+    
+    **URL 结构**
+    ```
+    GET /api/v1/containers/missing
+    ```
+    
+    **参数**
+    
+    没有参数。
+    
+    **回传**
+    
+    回传所有丢失容器的 MissingContainerMetadata 对象。
+    
+    ```json
+    {
+    	"totalCount": 26,
+    	"containers": [{
+    		"containerID": 1,
+    		"missingSince": 1605731029145,
+    		"keys": 7,
+    		"pipelineID": "88646d32-a1aa-4e1a",
+    		"replicas": [{
+    			"containerId": 1,
+    			"datanodeHost": "localhost-1",
+    			"firstReportTimestamp": 1605724047057,
+    			"lastReportTimestamp": 1605731201301
+    		}, 
+            ...
+            ]
+    	},
+        ...
+        ]
+    }
+    ```
+* **/containers/:id/replicaHistory**
+
+    **URL 结构**
+    ```
+    GET /api/v1/containers/:id/replicaHistory
+    ```
+    
+    **参数**
+    
+    没有参数。
+    
+    **回传**
+
+    回传给定容器 ID 的所有 ContainerHistory 对象。
+    
+    ```json
+    [
+      {
+        "containerId": 1,
+        "datanodeHost": "localhost-1",
+        "firstReportTimestamp": 1605724047057,
+        "lastReportTimestamp": 1605730421294
+      },
+      ...
+    ]
+    ```
+* **/containers/unhealthy**
+
+    **URL 结构**
+     ```
+     GET /api/v1/containers/unhealthy
+     ```
+     
+    **参数**
+    
+    * batchNum (可选)
+
+        回传结果的批号(如“页码”)。
+        传递1,将回传记录1以限制。传递2,将回传limit + 1 to 2 * limit,等等。

Review comment:
       Solved it

##########
File path: hadoop-hdds/docs/content/feature/Recon.zh.md
##########
@@ -23,27 +23,10 @@ summary: Recon 是 Ozone 中用于分析服务的网页用户界面(Web UI)
   limitations under the License.
 -->
 
-Recon 是 Ozone 中用于分析服务的网页用户界面(Web UI)。它是一个可选组件,但强烈建议您使用,因为它可以增加可视性。
+Recon 作为 Ozone 的管理和监听控制台。它是一个可选组件,但强烈建议将其添加到集群中,因为 Recon 可以在关键时刻帮助您对集群进行故障排除。请参阅 [Recon 架构]({{< ref "concept/Recon.zh.md" >}})以获得详细的架构概述和 HTTP API 参考的 [Recon API]({{< ref path="interface/ReconApi.zh.md" >}}) 文档。
 
-Recon 从 Ozone 集群中**收集**所有数据,并将其存储在 SQL数据库中,以便进一步分析。
-
- 1. Ozone Manager 的数据是通过异步过程在后台下载的。OM 会定期创建 RocksDB 快照,并将增量数据复制到 Recon 进行处理。
-
- 2. 数据节点不仅可以将心跳发送到 SCM,也能发送到 Recon。Recon 可以成为心跳的唯读(Read-only)监听器,并根据收到的信息更新本地数据库。
-
-当 Recon 配置完成时,我们便可以启动服务。
+Recon 是一个带有自己的 HTTP 网页服务器的服务,可以通过以下命令启动。

Review comment:
       Solved it

##########
File path: hadoop-hdds/docs/content/concept/Recon.zh.md
##########
@@ -0,0 +1,117 @@
+---
+title: "Recon"
+date: "2020-10-27"
+weight: 8
+menu: 
+  main:
+     parent: 概念
+summary: Recon 作为 Ozone 的管理和监视控制台。
+---
+<!---
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+Recon 充当 Ozone 的管理和监视控制台。它提供了 Ozone 的鸟瞰图,并通过基于 REST 的 API 和丰富的网页用户界面(Web UI)展示了集群的当前状态,从而帮助用户解决了任何问题。
+
+
+## 高层次设计
+
+{{<figure src="/concept/ReconHighLevelDesign.png" width="800px">}}
+
+<br/>
+
+在较高的层次上,Recon 从 Ozone Manager(OM)收集和汇总元数据,Storage Container Manager(SCM)和 Datanodes(DN)充当中央管理和监视控制台。Ozone 管理员可以使用 Recon 查询系统的当前状态,而不会使 OM  或 SCM 过载。
+
+Recon维护多个数据库,以支持批处理,更快的查询和持久化聚合信息。它维护 OM DB 和 SCM DB 的本地副本,以及用于持久存储聚合信息的 SQL 数据库。

Review comment:
       Solved it

##########
File path: hadoop-hdds/docs/content/concept/Recon.zh.md
##########
@@ -0,0 +1,117 @@
+---
+title: "Recon"
+date: "2020-10-27"
+weight: 8
+menu: 
+  main:
+     parent: 概念
+summary: Recon 作为 Ozone 的管理和监视控制台。
+---
+<!---
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+Recon 充当 Ozone 的管理和监视控制台。它提供了 Ozone 的鸟瞰图,并通过基于 REST 的 API 和丰富的网页用户界面(Web UI)展示了集群的当前状态,从而帮助用户解决了任何问题。
+
+
+## 高层次设计
+
+{{<figure src="/concept/ReconHighLevelDesign.png" width="800px">}}
+
+<br/>
+
+在较高的层次上,Recon 从 Ozone Manager(OM)收集和汇总元数据,Storage Container Manager(SCM)和 Datanodes(DN)充当中央管理和监视控制台。Ozone 管理员可以使用 Recon 查询系统的当前状态,而不会使 OM  或 SCM 过载。
+
+Recon维护多个数据库,以支持批处理,更快的查询和持久化聚合信息。它维护 OM DB 和 SCM DB 的本地副本,以及用于持久存储聚合信息的 SQL 数据库。
+
+Recon 还与 Prometheus 集成,提供一个 HTTP 端点来查询 Prometheus 的 Ozone 指标,并在网页用户界面(Web UI)中显示一些关键的时间点指标。
+
+## Recon 和 Ozone Manager
+
+{{<figure src="/concept/ReconOmDesign.png" width="800px">}}
+
+<br/>
+
+Recon 最初从领导者 OM 的 HTTP 端点获取 OM rocks DB 的完整快照,解压缩文件并初始化 RocksDB 以进行本地查询。通过对最后一个应用的序列 ID ,RPC calls 定期请求领导者 OM 进行增量更新,从而使数据库保持同步。如果由于某种原因而无法检索增量更新或将其应用于本地数据库,则再次请求完整快照以使本地数据库与 OM DB 保持同步。因此,Recon 可以显示陈旧的信息,因为本地数据库不会总是同步。从 OM 检索到的数据库更新,然后转换为一批事件,以便 OM DB 任务通过 [Recon 任务框架](#task-framework) 进行进一步处理。
+
+## Recon 和 Storage Container Manager
+
+{{<figure src="/concept/ReconScmDesign.png" width="800px">}}
+
+<br/>
+
+Recon 还充当数据节点的被动 SCM。在集群中配置 Recon 时,所有数据节点都向 Recon 注册,并像 SCM 一样向 Recon 发送心跳、容器报告、增量容器报告等。Recon 使用它从数据节点得到的所有信息在本地构建自己的 SCM rocks DB 副本。Recon 从不向数据节点发送任何命令作为响应,而只是充当被动 SCM 以更快地查找 SCM 元数据。
+
+## <a name="task-framework"></a> 任务框架
+
+Recon 有其自己的任务框架,可对从 OM 和 SCM 获得的数据进行批处理。一个任务可以在 OM DB 或 SCM DB 上监听和操作数据库事件,如`PUT`、`DELETE`、`UPDATE`等。在此基础上,任务实现`org.apache.hadoop.ozone.recon.tasks.ReconOmTask`或者扩展`org.apache.hadoop.ozone.recon.scm.ReconScmTask`。
+
+`ReconOmTask`的示例是`ContainerKeyMapperTask`,它在 RocksDB 中保留了容器 -> 键映射。当报告容器丢失或处于不健康运行状况的状态时,这有助于了解哪些键是容器的一部分。另一个示例是`FileSizeCountTask`,它跟踪 SQL 数据库中给定文件大小范围内的文件计数。这些任务具有两种情况的实现:
+ 
+ - 完整快照(reprocess())
+ - 增量更新(process())
+ 
+当从领导者 OM 获得 OM DB 的完整快照时,将对所有注册的 OM 任务调用 reprocess()。在随后的增量更新中,将在这些 OM 任务上调用 process()。
+
+`ReconScmTask`的示例是`ContainerHealthTask`,它以可配置的时间间隔运行,扫描所有容器的列表,并将不健康容器的状态(`MISSING`,`MIS_REPLICATED`,`UNDER_REPLICATED`,`OVER_REPLICATED`)保留在 SQL 表中。此信息用于确定集群中是否有丢失的容器。
+
+## Recon 和 Prometheus
+
+Recon 可以与配置为收集指标的任何 Prometheus 实例集成,并且可以在数据节点和 Pipelines 页面的 Recon UI 中显示有用的信息。Recon 还公开了一个代理端点 ([/metrics]({{< ref path="interface/ReconApi.zh.md#metrics" >}})) 来查询 Prometheus。可以通过将此配置`ozone.recon.prometheus.http.endpoint`设置为 Prometheus 端点如`ozone.recon.prometheus.http.endpoint=localhost:9090`来启用此集成。
+
+## API 参考
+
+[链接到完整的 API 参考]({{< ref path="interface/ReconApi.zh.md" >}})
+   
+## 持续状态
+
+ * [OM database]({{< ref "concept/OzoneManager.zh.md#persisted-state" >}})的本地副本
+ * [SCM database]({{< ref "concept/StorageContainerManager.zh.md#persisted-state" >}})的本地副本
+ * 以下数据将保留在指定 RocksDB 目录中的 Recon 中: 
+     * ContainerKey 表
+         * 存储映射(容器,键) -> 计数
+     * ContainerKeyCount 表
+         * 存储容器 ID  -> 容器内的键数
+ * 以下数据存储在已配置的 SQL 数据库中(默认为 Derby ):
+     * GlobalStats 表
+         * 一个键 -> Value table 用于存储集群中出现的卷/桶/键的总数等聚合信息
+     * FileCountBySize 表
+         * 跟踪集群中文件大小范围内的文件数量
+     * ReconTaskStatus 表
+         * 在[Recon 任务框架](#task-framework)中跟踪已注册的 OM 和 SCM DB 任务的状态和最后运行时间戳

Review comment:
       Solved it

##########
File path: hadoop-hdds/docs/content/concept/Recon.zh.md
##########
@@ -0,0 +1,117 @@
+---
+title: "Recon"
+date: "2020-10-27"
+weight: 8
+menu: 
+  main:
+     parent: 概念
+summary: Recon 作为 Ozone 的管理和监视控制台。
+---
+<!---
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+Recon 充当 Ozone 的管理和监视控制台。它提供了 Ozone 的鸟瞰图,并通过基于 REST 的 API 和丰富的网页用户界面(Web UI)展示了集群的当前状态,从而帮助用户解决了任何问题。
+
+
+## 高层次设计
+
+{{<figure src="/concept/ReconHighLevelDesign.png" width="800px">}}
+
+<br/>
+
+在较高的层次上,Recon 从 Ozone Manager(OM)收集和汇总元数据,Storage Container Manager(SCM)和 Datanodes(DN)充当中央管理和监视控制台。Ozone 管理员可以使用 Recon 查询系统的当前状态,而不会使 OM  或 SCM 过载。
+
+Recon维护多个数据库,以支持批处理,更快的查询和持久化聚合信息。它维护 OM DB 和 SCM DB 的本地副本,以及用于持久存储聚合信息的 SQL 数据库。
+
+Recon 还与 Prometheus 集成,提供一个 HTTP 端点来查询 Prometheus 的 Ozone 指标,并在网页用户界面(Web UI)中显示一些关键的时间点指标。
+
+## Recon 和 Ozone Manager
+
+{{<figure src="/concept/ReconOmDesign.png" width="800px">}}
+
+<br/>
+
+Recon 最初从领导者 OM 的 HTTP 端点获取 OM rocks DB 的完整快照,解压缩文件并初始化 RocksDB 以进行本地查询。通过对最后一个应用的序列 ID ,RPC calls 定期请求领导者 OM 进行增量更新,从而使数据库保持同步。如果由于某种原因而无法检索增量更新或将其应用于本地数据库,则再次请求完整快照以使本地数据库与 OM DB 保持同步。因此,Recon 可以显示陈旧的信息,因为本地数据库不会总是同步。从 OM 检索到的数据库更新,然后转换为一批事件,以便 OM DB 任务通过 [Recon 任务框架](#task-framework) 进行进一步处理。
+
+## Recon 和 Storage Container Manager
+
+{{<figure src="/concept/ReconScmDesign.png" width="800px">}}
+
+<br/>
+
+Recon 还充当数据节点的被动 SCM。在集群中配置 Recon 时,所有数据节点都向 Recon 注册,并像 SCM 一样向 Recon 发送心跳、容器报告、增量容器报告等。Recon 使用它从数据节点得到的所有信息在本地构建自己的 SCM rocks DB 副本。Recon 从不向数据节点发送任何命令作为响应,而只是充当被动 SCM 以更快地查找 SCM 元数据。
+
+## <a name="task-framework"></a> 任务框架
+
+Recon 有其自己的任务框架,可对从 OM 和 SCM 获得的数据进行批处理。一个任务可以在 OM DB 或 SCM DB 上监听和操作数据库事件,如`PUT`、`DELETE`、`UPDATE`等。在此基础上,任务实现`org.apache.hadoop.ozone.recon.tasks.ReconOmTask`或者扩展`org.apache.hadoop.ozone.recon.scm.ReconScmTask`。
+
+`ReconOmTask`的示例是`ContainerKeyMapperTask`,它在 RocksDB 中保留了容器 -> 键映射。当报告容器丢失或处于不健康运行状况的状态时,这有助于了解哪些键是容器的一部分。另一个示例是`FileSizeCountTask`,它跟踪 SQL 数据库中给定文件大小范围内的文件计数。这些任务具有两种情况的实现:
+ 
+ - 完整快照(reprocess())
+ - 增量更新(process())
+ 
+当从领导者 OM 获得 OM DB 的完整快照时,将对所有注册的 OM 任务调用 reprocess()。在随后的增量更新中,将在这些 OM 任务上调用 process()。
+
+`ReconScmTask`的示例是`ContainerHealthTask`,它以可配置的时间间隔运行,扫描所有容器的列表,并将不健康容器的状态(`MISSING`,`MIS_REPLICATED`,`UNDER_REPLICATED`,`OVER_REPLICATED`)保留在 SQL 表中。此信息用于确定集群中是否有丢失的容器。
+
+## Recon 和 Prometheus
+
+Recon 可以与配置为收集指标的任何 Prometheus 实例集成,并且可以在数据节点和 Pipelines 页面的 Recon UI 中显示有用的信息。Recon 还公开了一个代理端点 ([/metrics]({{< ref path="interface/ReconApi.zh.md#metrics" >}})) 来查询 Prometheus。可以通过将此配置`ozone.recon.prometheus.http.endpoint`设置为 Prometheus 端点如`ozone.recon.prometheus.http.endpoint=localhost:9090`来启用此集成。

Review comment:
       Solved it

##########
File path: hadoop-hdds/docs/content/concept/Recon.zh.md
##########
@@ -0,0 +1,117 @@
+---
+title: "Recon"
+date: "2020-10-27"
+weight: 8
+menu: 
+  main:
+     parent: 概念
+summary: Recon 作为 Ozone 的管理和监视控制台。
+---
+<!---
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+Recon 充当 Ozone 的管理和监视控制台。它提供了 Ozone 的鸟瞰图,并通过基于 REST 的 API 和丰富的网页用户界面(Web UI)展示了集群的当前状态,从而帮助用户解决了任何问题。
+
+
+## 高层次设计
+
+{{<figure src="/concept/ReconHighLevelDesign.png" width="800px">}}
+
+<br/>
+
+在较高的层次上,Recon 从 Ozone Manager(OM)收集和汇总元数据,Storage Container Manager(SCM)和 Datanodes(DN)充当中央管理和监视控制台。Ozone 管理员可以使用 Recon 查询系统的当前状态,而不会使 OM  或 SCM 过载。
+
+Recon维护多个数据库,以支持批处理,更快的查询和持久化聚合信息。它维护 OM DB 和 SCM DB 的本地副本,以及用于持久存储聚合信息的 SQL 数据库。
+
+Recon 还与 Prometheus 集成,提供一个 HTTP 端点来查询 Prometheus 的 Ozone 指标,并在网页用户界面(Web UI)中显示一些关键的时间点指标。
+
+## Recon 和 Ozone Manager
+
+{{<figure src="/concept/ReconOmDesign.png" width="800px">}}
+
+<br/>
+
+Recon 最初从领导者 OM 的 HTTP 端点获取 OM rocks DB 的完整快照,解压缩文件并初始化 RocksDB 以进行本地查询。通过对最后一个应用的序列 ID ,RPC calls 定期请求领导者 OM 进行增量更新,从而使数据库保持同步。如果由于某种原因而无法检索增量更新或将其应用于本地数据库,则再次请求完整快照以使本地数据库与 OM DB 保持同步。因此,Recon 可以显示陈旧的信息,因为本地数据库不会总是同步。从 OM 检索到的数据库更新,然后转换为一批事件,以便 OM DB 任务通过 [Recon 任务框架](#task-framework) 进行进一步处理。
+
+## Recon 和 Storage Container Manager
+
+{{<figure src="/concept/ReconScmDesign.png" width="800px">}}
+
+<br/>
+
+Recon 还充当数据节点的被动 SCM。在集群中配置 Recon 时,所有数据节点都向 Recon 注册,并像 SCM 一样向 Recon 发送心跳、容器报告、增量容器报告等。Recon 使用它从数据节点得到的所有信息在本地构建自己的 SCM rocks DB 副本。Recon 从不向数据节点发送任何命令作为响应,而只是充当被动 SCM 以更快地查找 SCM 元数据。
+
+## <a name="task-framework"></a> 任务框架
+
+Recon 有其自己的任务框架,可对从 OM 和 SCM 获得的数据进行批处理。一个任务可以在 OM DB 或 SCM DB 上监听和操作数据库事件,如`PUT`、`DELETE`、`UPDATE`等。在此基础上,任务实现`org.apache.hadoop.ozone.recon.tasks.ReconOmTask`或者扩展`org.apache.hadoop.ozone.recon.scm.ReconScmTask`。
+
+`ReconOmTask`的示例是`ContainerKeyMapperTask`,它在 RocksDB 中保留了容器 -> 键映射。当报告容器丢失或处于不健康运行状况的状态时,这有助于了解哪些键是容器的一部分。另一个示例是`FileSizeCountTask`,它跟踪 SQL 数据库中给定文件大小范围内的文件计数。这些任务具有两种情况的实现:
+ 
+ - 完整快照(reprocess())
+ - 增量更新(process())
+ 
+当从领导者 OM 获得 OM DB 的完整快照时,将对所有注册的 OM 任务调用 reprocess()。在随后的增量更新中,将在这些 OM 任务上调用 process()。
+
+`ReconScmTask`的示例是`ContainerHealthTask`,它以可配置的时间间隔运行,扫描所有容器的列表,并将不健康容器的状态(`MISSING`,`MIS_REPLICATED`,`UNDER_REPLICATED`,`OVER_REPLICATED`)保留在 SQL 表中。此信息用于确定集群中是否有丢失的容器。
+
+## Recon 和 Prometheus
+
+Recon 可以与配置为收集指标的任何 Prometheus 实例集成,并且可以在数据节点和 Pipelines 页面的 Recon UI 中显示有用的信息。Recon 还公开了一个代理端点 ([/metrics]({{< ref path="interface/ReconApi.zh.md#metrics" >}})) 来查询 Prometheus。可以通过将此配置`ozone.recon.prometheus.http.endpoint`设置为 Prometheus 端点如`ozone.recon.prometheus.http.endpoint=localhost:9090`来启用此集成。
+
+## API 参考
+
+[链接到完整的 API 参考]({{< ref path="interface/ReconApi.zh.md" >}})
+   
+## 持续状态
+
+ * [OM database]({{< ref "concept/OzoneManager.zh.md#persisted-state" >}})的本地副本
+ * [SCM database]({{< ref "concept/StorageContainerManager.zh.md#persisted-state" >}})的本地副本
+ * 以下数据将保留在指定 RocksDB 目录中的 Recon 中: 
+     * ContainerKey 表
+         * 存储映射(容器,键) -> 计数
+     * ContainerKeyCount 表
+         * 存储容器 ID  -> 容器内的键数
+ * 以下数据存储在已配置的 SQL 数据库中(默认为 Derby ):
+     * GlobalStats 表
+         * 一个键 -> Value table 用于存储集群中出现的卷/桶/键的总数等聚合信息
+     * FileCountBySize 表
+         * 跟踪集群中文件大小范围内的文件数量
+     * ReconTaskStatus 表
+         * 在[Recon 任务框架](#task-framework)中跟踪已注册的 OM 和 SCM DB 任务的状态和最后运行时间戳
+     * ContainerHistory 表
+         * 存储容器副本 -> 具有最新已知时间戳记的数据节点映射。用于确定报告容器丢失时的最后一个已知数据节点
+     * UnhealthyContainers 表
+         * 随时跟踪集群中所有不健康容器(MISSING,UNDER_REPLICATED,OVER_REPLICATED,MIS_REPLICATED)

Review comment:
       Solved it

##########
File path: hadoop-hdds/docs/content/interface/ReconApi.zh.md
##########
@@ -0,0 +1,498 @@
+---
+title: Recon API
+weight: 4
+menu:
+   main:
+      parent: "编程接口"
+summary: Recon 服务器支持 HTTP 端点,以帮助故障排除和监听 Ozone 集群。
+---
+
+<!---
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+Recon API v1 是一组 HTTP 端点,可以帮助您了解 Ozone 集群的当前状态,并在需要时进行故障排除。
+
+### HTTP 端点
+
+#### 容器
+
+* **/containers**
+
+    **URL 结构**
+    ```
+    GET /api/v1/containers
+    ```
+
+    **参数**
+
+    * prevKey (可选)
+    
+        只回传ID大于给定的prevKey的容器。
+        范例:prevKey=1
+
+    * limit (可选)
+    
+        只回传有限数量的结果。默认限制是1000。
+    
+    **回传**
+    
+    回传所有 ContainerMetadata 对象。
+    
+    ```json
+    {
+      "data": {
+        "totalCount": 3,
+        "containers": [
+          {
+            "ContainerID": 1,
+            "NumberOfKeys": 834
+          },
+          {
+            "ContainerID": 2,
+            "NumberOfKeys": 833
+          },
+          {
+            "ContainerID": 3,
+            "NumberOfKeys": 833
+          }
+        ]
+      }
+    }
+    ```
+
+* **/containers/:id/keys**
+
+    **URL 结构**
+    ```
+    GET /api/v1/containers/:id/keys
+    ```
+    
+    **参数**
+    
+    * prevKey (可选)
+     
+        只回传在给定的 prevKey 键前缀之后的键。
+        范例:prevKey=/vol1/bucket1/key1
+        
+    * limit (可选)
+    
+        只回传有限数量的结果。默认限制是1000。
+        
+    **回传**
+    
+    回传给定容器 ID 的所有 KeyMetadata 对象。
+    
+    ```json
+    {
+      "totalCount":7,
+      "keys": [
+        {
+          "Volume":"vol-1-73141",
+          "Bucket":"bucket-3-35816",
+          "Key":"key-0-43637",
+          "DataSize":1000,
+          "Versions":[0],
+          "Blocks": {
+            "0": [
+              {
+                "containerID":1,
+                "localID":105232659753992201
+              }
+            ]
+          },
+          "CreationTime":"2020-11-18T18:09:17.722Z",
+          "ModificationTime":"2020-11-18T18:09:30.405Z"
+        },
+        ...
+      ]
+    }
+    ```
+* **/containers/missing**
+    
+    **URL 结构**
+    ```
+    GET /api/v1/containers/missing
+    ```
+    
+    **参数**
+    
+    没有参数。
+    
+    **回传**
+    
+    回传所有丢失容器的 MissingContainerMetadata 对象。
+    
+    ```json
+    {
+    	"totalCount": 26,
+    	"containers": [{
+    		"containerID": 1,
+    		"missingSince": 1605731029145,
+    		"keys": 7,
+    		"pipelineID": "88646d32-a1aa-4e1a",
+    		"replicas": [{
+    			"containerId": 1,
+    			"datanodeHost": "localhost-1",
+    			"firstReportTimestamp": 1605724047057,
+    			"lastReportTimestamp": 1605731201301
+    		}, 
+            ...
+            ]
+    	},
+        ...
+        ]
+    }
+    ```
+* **/containers/:id/replicaHistory**
+
+    **URL 结构**
+    ```
+    GET /api/v1/containers/:id/replicaHistory
+    ```
+    
+    **参数**
+    
+    没有参数。
+    
+    **回传**
+
+    回传给定容器 ID 的所有 ContainerHistory 对象。
+    
+    ```json
+    [
+      {
+        "containerId": 1,
+        "datanodeHost": "localhost-1",
+        "firstReportTimestamp": 1605724047057,
+        "lastReportTimestamp": 1605730421294
+      },
+      ...
+    ]
+    ```
+* **/containers/unhealthy**
+
+    **URL 结构**
+     ```
+     GET /api/v1/containers/unhealthy
+     ```
+     
+    **参数**
+    
+    * batchNum (可选)
+
+        回传结果的批号(如“页码”)。
+        传递1,将回传记录1以限制。传递2,将回传limit + 1 to 2 * limit,等等。
+        
+    * limit (可选)
+    
+        只回传有限数量的结果。默认限制是1000。
+        
+    **回传**
+    
+    回传所有不健康容器的 UnhealthyContainerMetadata 对象。
+    
+     ```json
+     {
+     	"missingCount": 2,
+     	"underReplicatedCount": 0,
+     	"overReplicatedCount": 0,
+     	"misReplicatedCount": 0,
+     	"containers": [{
+     		"containerID": 1,
+     		"containerState": "MISSING",
+     		"unhealthySince": 1605731029145,
+     		"expectedReplicaCount": 3,
+     		"actualReplicaCount": 0,
+     		"replicaDeltaCount": 3,
+     		"reason": null,
+     		"keys": 7,
+     		"pipelineID": "88646d32-a1aa-4e1a",
+     		"replicas": [{
+     			"containerId": 1,
+     			"datanodeHost": "localhost-1",
+     			"firstReportTimestamp": 1605722960125,
+     			"lastReportTimestamp": 1605731230509
+     		}, 
+            ...
+            ]
+     	},
+        ...
+        ]
+     } 
+     ```
+     
+* **/containers/unhealthy/:state**
+
+    **URL 结构**
+    ```
+    GET /api/v1/containers/unhealthy/:state
+    ```
+     
+    **参数**
+    
+    * batchNum (可选)
+    
+        回传结果的批号(如“页码”)。
+        传递1,将回传记录1以限制。传递2,将回传limit + 1 to 2 * limit,等等。

Review comment:
       Solved it

##########
File path: hadoop-hdds/docs/content/interface/ReconApi.zh.md
##########
@@ -0,0 +1,498 @@
+---
+title: Recon API
+weight: 4
+menu:
+   main:
+      parent: "编程接口"
+summary: Recon 服务器支持 HTTP 端点,以帮助故障排除和监听 Ozone 集群。
+---
+
+<!---
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+Recon API v1 是一组 HTTP 端点,可以帮助您了解 Ozone 集群的当前状态,并在需要时进行故障排除。
+
+### HTTP 端点
+
+#### 容器
+
+* **/containers**
+
+    **URL 结构**
+    ```
+    GET /api/v1/containers
+    ```
+
+    **参数**
+
+    * prevKey (可选)
+    
+        只回传ID大于给定的prevKey的容器。
+        范例:prevKey=1
+
+    * limit (可选)
+    
+        只回传有限数量的结果。默认限制是1000。
+    
+    **回传**
+    
+    回传所有 ContainerMetadata 对象。
+    
+    ```json
+    {
+      "data": {
+        "totalCount": 3,
+        "containers": [
+          {
+            "ContainerID": 1,
+            "NumberOfKeys": 834
+          },
+          {
+            "ContainerID": 2,
+            "NumberOfKeys": 833
+          },
+          {
+            "ContainerID": 3,
+            "NumberOfKeys": 833
+          }
+        ]
+      }
+    }
+    ```
+
+* **/containers/:id/keys**
+
+    **URL 结构**
+    ```
+    GET /api/v1/containers/:id/keys
+    ```
+    
+    **参数**
+    
+    * prevKey (可选)
+     
+        只回传在给定的 prevKey 键前缀之后的键。
+        范例:prevKey=/vol1/bucket1/key1
+        
+    * limit (可选)
+    
+        只回传有限数量的结果。默认限制是1000。
+        
+    **回传**
+    
+    回传给定容器 ID 的所有 KeyMetadata 对象。
+    
+    ```json
+    {
+      "totalCount":7,
+      "keys": [
+        {
+          "Volume":"vol-1-73141",
+          "Bucket":"bucket-3-35816",
+          "Key":"key-0-43637",
+          "DataSize":1000,
+          "Versions":[0],
+          "Blocks": {
+            "0": [
+              {
+                "containerID":1,
+                "localID":105232659753992201
+              }
+            ]
+          },
+          "CreationTime":"2020-11-18T18:09:17.722Z",
+          "ModificationTime":"2020-11-18T18:09:30.405Z"
+        },
+        ...
+      ]
+    }
+    ```
+* **/containers/missing**
+    
+    **URL 结构**
+    ```
+    GET /api/v1/containers/missing
+    ```
+    
+    **参数**
+    
+    没有参数。
+    
+    **回传**
+    
+    回传所有丢失容器的 MissingContainerMetadata 对象。
+    
+    ```json
+    {
+    	"totalCount": 26,
+    	"containers": [{
+    		"containerID": 1,
+    		"missingSince": 1605731029145,
+    		"keys": 7,
+    		"pipelineID": "88646d32-a1aa-4e1a",
+    		"replicas": [{
+    			"containerId": 1,
+    			"datanodeHost": "localhost-1",
+    			"firstReportTimestamp": 1605724047057,
+    			"lastReportTimestamp": 1605731201301
+    		}, 
+            ...
+            ]
+    	},
+        ...
+        ]
+    }
+    ```
+* **/containers/:id/replicaHistory**
+
+    **URL 结构**
+    ```
+    GET /api/v1/containers/:id/replicaHistory
+    ```
+    
+    **参数**
+    
+    没有参数。
+    
+    **回传**
+
+    回传给定容器 ID 的所有 ContainerHistory 对象。
+    
+    ```json
+    [
+      {
+        "containerId": 1,
+        "datanodeHost": "localhost-1",
+        "firstReportTimestamp": 1605724047057,
+        "lastReportTimestamp": 1605730421294
+      },
+      ...
+    ]
+    ```
+* **/containers/unhealthy**
+
+    **URL 结构**
+     ```
+     GET /api/v1/containers/unhealthy
+     ```
+     
+    **参数**
+    
+    * batchNum (可选)
+
+        回传结果的批号(如“页码”)。
+        传递1,将回传记录1以限制。传递2,将回传limit + 1 to 2 * limit,等等。
+        
+    * limit (可选)
+    
+        只回传有限数量的结果。默认限制是1000。
+        
+    **回传**
+    
+    回传所有不健康容器的 UnhealthyContainerMetadata 对象。
+    
+     ```json
+     {
+     	"missingCount": 2,
+     	"underReplicatedCount": 0,
+     	"overReplicatedCount": 0,
+     	"misReplicatedCount": 0,
+     	"containers": [{
+     		"containerID": 1,
+     		"containerState": "MISSING",
+     		"unhealthySince": 1605731029145,
+     		"expectedReplicaCount": 3,
+     		"actualReplicaCount": 0,
+     		"replicaDeltaCount": 3,
+     		"reason": null,
+     		"keys": 7,
+     		"pipelineID": "88646d32-a1aa-4e1a",
+     		"replicas": [{
+     			"containerId": 1,
+     			"datanodeHost": "localhost-1",
+     			"firstReportTimestamp": 1605722960125,
+     			"lastReportTimestamp": 1605731230509
+     		}, 
+            ...
+            ]
+     	},
+        ...
+        ]
+     } 
+     ```
+     
+* **/containers/unhealthy/:state**
+
+    **URL 结构**
+    ```
+    GET /api/v1/containers/unhealthy/:state
+    ```
+     
+    **参数**
+    
+    * batchNum (可选)
+    
+        回传结果的批号(如“页码”)。
+        传递1,将回传记录1以限制。传递2,将回传limit + 1 to 2 * limit,等等。
+        
+    * limit (可选)
+    
+        只回传有限数量的结果。默认限制是1000。
+        
+    **回传**
+    
+    回传处于给定状态的容器的 UnhealthyContainerMetadata 对象。
+    可能有不健康的容器状态为`MISSING`, `MIS_REPLICATED`, `UNDER_REPLICATED`, `OVER_REPLICATED`.
+    响应结构与`/containers/unhealthy`相同
+    
+#### 集群状态
+
+* **/clusterState**
+
+    **URL 结构**
+    ```
+    GET /api/v1/clusterState
+    ```
+     
+    **参数**
+    
+    没有参数。
+    
+    **回传**
+    
+    返回 Ozone 集群当前状态的摘要。
+    
+     ```json
+     {
+     	"pipelines": 5,
+     	"totalDatanodes": 4,
+     	"healthyDatanodes": 4,
+     	"storageReport": {
+     		"capacity": 1081719668736,
+     		"used": 1309212672,
+     		"remaining": 597361258496
+     	},
+     	"containers": 26,
+     	"volumes": 6,
+     	"buckets": 26,
+     	"keys": 25
+     }
+     ```
+     
+#### 数据节点
+
+* **/datanodes**
+
+    **URL 结构**
+    ```
+    GET /api/v1/datanodes
+    ```
+    
+    **参数**
+    
+    没有参数。
+    
+    **回传**
+    
+    回传集群中的所有数据节点。
+    
+    ```json
+    {
+     	"totalCount": 4,
+     	"datanodes": [{
+     		"uuid": "f8f8cb45-3ab2-4123",
+     		"hostname": "localhost-1",
+     		"state": "HEALTHY",
+     		"lastHeartbeat": 1605738400544,
+     		"storageReport": {
+     			"capacity": 270429917184,
+     			"used": 358805504,
+     			"remaining": 119648149504
+     		},
+     		"pipelines": [{
+     			"pipelineID": "b9415b20-b9bd-4225",
+     			"replicationType": "RATIS",
+     			"replicationFactor": 3,
+     			"leaderNode": "localhost-2"
+     		}, {
+     			"pipelineID": "3bf4a9e9-69cc-4d20",
+     			"replicationType": "RATIS",
+     			"replicationFactor": 1,
+     			"leaderNode": "localhost-1"
+     		}],
+     		"containers": 17,
+     		"leaderCount": 1
+     	},
+        ...
+        ]
+     }
+     ```
+     
+#### 管道
+
+* **/pipelines**
+
+    **URL 结构**
+    ```
+    GET /api/v1/pipelines
+    ```
+    **参数**
+    
+    没有参数
+    
+    **回传**
+    
+    回传在集群中的所有管道
+    
+    ```json
+     {
+     	"totalCount": 5,
+     	"pipelines": [{
+     		"pipelineId": "b9415b20-b9bd-4225",
+     		"status": "OPEN",
+     		"leaderNode": "localhost-1",
+     		"datanodes": ["localhost-1", "localhost-2", "localhost-3"],
+     		"lastLeaderElection": 0,
+     		"duration": 23166128,
+     		"leaderElections": 0,
+     		"replicationType": "RATIS",
+     		"replicationFactor": 3,
+     		"containers": 0
+     	},
+        ...
+        ]
+     }
+     ```  
+
+#### 任务
+
+* **/task/status**
+
+    **URL 结构**
+    ```
+    GET /api/v1/task/status
+    ```
+    
+    **参数**
+    
+    没有参数
+    
+    **回传**
+    
+    回传所有 Recon 任务的状态。
+  
+    ```json
+     [
+       {
+     	"taskName": "OmDeltaRequest",
+     	"lastUpdatedTimestamp": 1605724099147,
+     	"lastUpdatedSeqNumber": 186
+       },
+       ...
+     ]
+    ```
+    
+#### 使用率
+
+* **/utilization/fileCount**
+
+    **URL 结构**
+    ```
+    GET /api/v1/utilization/fileCount
+    ```
+    
+    **参数**
+    
+    * volume (可选)
+    
+        根据给定的卷名过滤结果。
+        
+    * bucket (可选)
+    
+        根据给定的桶名过滤结果。
+        
+    * fileSize (可选)
+
+        根据给定的文件大小筛选结果。
+        
+    **回传**
+    
+    回传不同文件范围内的文件计数,其中响应对象中的`fileSize`是文件大小范围的上限。
+    
+    ```json
+     [{
+     	"volume": "vol-2-04168",
+     	"bucket": "bucket-0-11685",
+     	"fileSize": 1024,
+     	"count": 1
+     }, {
+     	"volume": "vol-2-04168",
+     	"bucket": "bucket-1-41795",
+     	"fileSize": 1024,
+     	"count": 1
+     }, {
+     	"volume": "vol-2-04168",
+     	"bucket": "bucket-2-93377",
+     	"fileSize": 1024,
+     	"count": 1
+     }, {
+     	"volume": "vol-2-04168",
+     	"bucket": "bucket-3-50336",
+     	"fileSize": 1024,
+     	"count": 2
+     }]
+    ```
+    
+#### <a name="metrics"></a> 指标
+
+* **/metrics/:api**
+
+    **URL 结构**
+    ```
+    GET /api/v1/metrics/:api
+    ```
+    
+    **参数**
+    
+    这是 Prometheus 的代理端点,并回传与 Prometheus 端点相同的响应。
+    范例:/api/v1/metrics/query?query=ratis_leader_election_electionCount

Review comment:
       Solved it

##########
File path: hadoop-hdds/docs/content/interface/ReconApi.zh.md
##########
@@ -0,0 +1,498 @@
+---
+title: Recon API
+weight: 4
+menu:
+   main:
+      parent: "编程接口"
+summary: Recon 服务器支持 HTTP 端点,以帮助故障排除和监听 Ozone 集群。
+---
+
+<!---
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+Recon API v1 是一组 HTTP 端点,可以帮助您了解 Ozone 集群的当前状态,并在需要时进行故障排除。
+
+### HTTP 端点
+
+#### 容器
+
+* **/containers**
+
+    **URL 结构**
+    ```
+    GET /api/v1/containers
+    ```
+
+    **参数**
+
+    * prevKey (可选)
+    
+        只回传ID大于给定的prevKey的容器。
+        范例:prevKey=1
+
+    * limit (可选)
+    
+        只回传有限数量的结果。默认限制是1000。
+    
+    **回传**
+    
+    回传所有 ContainerMetadata 对象。
+    
+    ```json
+    {
+      "data": {
+        "totalCount": 3,
+        "containers": [
+          {
+            "ContainerID": 1,
+            "NumberOfKeys": 834
+          },
+          {
+            "ContainerID": 2,
+            "NumberOfKeys": 833
+          },
+          {
+            "ContainerID": 3,
+            "NumberOfKeys": 833
+          }
+        ]
+      }
+    }
+    ```
+
+* **/containers/:id/keys**
+
+    **URL 结构**
+    ```
+    GET /api/v1/containers/:id/keys
+    ```
+    
+    **参数**
+    
+    * prevKey (可选)
+     
+        只回传在给定的 prevKey 键前缀之后的键。
+        范例:prevKey=/vol1/bucket1/key1
+        
+    * limit (可选)
+    
+        只回传有限数量的结果。默认限制是1000。
+        
+    **回传**
+    
+    回传给定容器 ID 的所有 KeyMetadata 对象。
+    
+    ```json
+    {
+      "totalCount":7,
+      "keys": [
+        {
+          "Volume":"vol-1-73141",
+          "Bucket":"bucket-3-35816",
+          "Key":"key-0-43637",
+          "DataSize":1000,
+          "Versions":[0],
+          "Blocks": {
+            "0": [
+              {
+                "containerID":1,
+                "localID":105232659753992201
+              }
+            ]
+          },
+          "CreationTime":"2020-11-18T18:09:17.722Z",
+          "ModificationTime":"2020-11-18T18:09:30.405Z"
+        },
+        ...
+      ]
+    }
+    ```
+* **/containers/missing**
+    
+    **URL 结构**
+    ```
+    GET /api/v1/containers/missing
+    ```
+    
+    **参数**
+    
+    没有参数。
+    
+    **回传**
+    
+    回传所有丢失容器的 MissingContainerMetadata 对象。
+    
+    ```json
+    {
+    	"totalCount": 26,
+    	"containers": [{
+    		"containerID": 1,
+    		"missingSince": 1605731029145,
+    		"keys": 7,
+    		"pipelineID": "88646d32-a1aa-4e1a",
+    		"replicas": [{
+    			"containerId": 1,
+    			"datanodeHost": "localhost-1",
+    			"firstReportTimestamp": 1605724047057,
+    			"lastReportTimestamp": 1605731201301
+    		}, 
+            ...
+            ]
+    	},
+        ...
+        ]
+    }
+    ```
+* **/containers/:id/replicaHistory**
+
+    **URL 结构**
+    ```
+    GET /api/v1/containers/:id/replicaHistory
+    ```
+    
+    **参数**
+    
+    没有参数。
+    
+    **回传**
+
+    回传给定容器 ID 的所有 ContainerHistory 对象。
+    
+    ```json
+    [
+      {
+        "containerId": 1,
+        "datanodeHost": "localhost-1",
+        "firstReportTimestamp": 1605724047057,
+        "lastReportTimestamp": 1605730421294
+      },
+      ...
+    ]
+    ```
+* **/containers/unhealthy**
+
+    **URL 结构**
+     ```
+     GET /api/v1/containers/unhealthy
+     ```
+     
+    **参数**
+    
+    * batchNum (可选)
+
+        回传结果的批号(如“页码”)。
+        传递1,将回传记录1以限制。传递2,将回传limit + 1 to 2 * limit,等等。
+        
+    * limit (可选)
+    
+        只回传有限数量的结果。默认限制是1000。
+        
+    **回传**
+    
+    回传所有不健康容器的 UnhealthyContainerMetadata 对象。
+    
+     ```json
+     {
+     	"missingCount": 2,
+     	"underReplicatedCount": 0,
+     	"overReplicatedCount": 0,
+     	"misReplicatedCount": 0,
+     	"containers": [{
+     		"containerID": 1,
+     		"containerState": "MISSING",
+     		"unhealthySince": 1605731029145,
+     		"expectedReplicaCount": 3,
+     		"actualReplicaCount": 0,
+     		"replicaDeltaCount": 3,
+     		"reason": null,
+     		"keys": 7,
+     		"pipelineID": "88646d32-a1aa-4e1a",
+     		"replicas": [{
+     			"containerId": 1,
+     			"datanodeHost": "localhost-1",
+     			"firstReportTimestamp": 1605722960125,
+     			"lastReportTimestamp": 1605731230509
+     		}, 
+            ...
+            ]
+     	},
+        ...
+        ]
+     } 
+     ```
+     
+* **/containers/unhealthy/:state**
+
+    **URL 结构**
+    ```
+    GET /api/v1/containers/unhealthy/:state
+    ```
+     
+    **参数**
+    
+    * batchNum (可选)
+    
+        回传结果的批号(如“页码”)。
+        传递1,将回传记录1以限制。传递2,将回传limit + 1 to 2 * limit,等等。
+        
+    * limit (可选)
+    
+        只回传有限数量的结果。默认限制是1000。
+        
+    **回传**
+    
+    回传处于给定状态的容器的 UnhealthyContainerMetadata 对象。
+    可能有不健康的容器状态为`MISSING`, `MIS_REPLICATED`, `UNDER_REPLICATED`, `OVER_REPLICATED`.
+    响应结构与`/containers/unhealthy`相同
+    
+#### 集群状态
+
+* **/clusterState**
+
+    **URL 结构**
+    ```
+    GET /api/v1/clusterState
+    ```
+     
+    **参数**
+    
+    没有参数。
+    
+    **回传**
+    
+    返回 Ozone 集群当前状态的摘要。
+    
+     ```json
+     {
+     	"pipelines": 5,
+     	"totalDatanodes": 4,
+     	"healthyDatanodes": 4,
+     	"storageReport": {
+     		"capacity": 1081719668736,
+     		"used": 1309212672,
+     		"remaining": 597361258496
+     	},
+     	"containers": 26,
+     	"volumes": 6,
+     	"buckets": 26,
+     	"keys": 25
+     }
+     ```
+     
+#### 数据节点
+
+* **/datanodes**
+
+    **URL 结构**
+    ```
+    GET /api/v1/datanodes
+    ```
+    
+    **参数**
+    
+    没有参数。
+    
+    **回传**
+    
+    回传集群中的所有数据节点。
+    
+    ```json
+    {
+     	"totalCount": 4,
+     	"datanodes": [{
+     		"uuid": "f8f8cb45-3ab2-4123",
+     		"hostname": "localhost-1",
+     		"state": "HEALTHY",
+     		"lastHeartbeat": 1605738400544,
+     		"storageReport": {
+     			"capacity": 270429917184,
+     			"used": 358805504,
+     			"remaining": 119648149504
+     		},
+     		"pipelines": [{
+     			"pipelineID": "b9415b20-b9bd-4225",
+     			"replicationType": "RATIS",
+     			"replicationFactor": 3,
+     			"leaderNode": "localhost-2"
+     		}, {
+     			"pipelineID": "3bf4a9e9-69cc-4d20",
+     			"replicationType": "RATIS",
+     			"replicationFactor": 1,
+     			"leaderNode": "localhost-1"
+     		}],
+     		"containers": 17,
+     		"leaderCount": 1
+     	},
+        ...
+        ]
+     }
+     ```
+     
+#### 管道
+
+* **/pipelines**
+
+    **URL 结构**
+    ```
+    GET /api/v1/pipelines
+    ```
+    **参数**
+    
+    没有参数
+    
+    **回传**
+    
+    回传在集群中的所有管道

Review comment:
       Solved it

##########
File path: hadoop-hdds/docs/content/interface/ReconApi.zh.md
##########
@@ -0,0 +1,498 @@
+---
+title: Recon API
+weight: 4
+menu:
+   main:
+      parent: "编程接口"
+summary: Recon 服务器支持 HTTP 端点,以帮助故障排除和监听 Ozone 集群。
+---
+
+<!---
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+Recon API v1 是一组 HTTP 端点,可以帮助您了解 Ozone 集群的当前状态,并在需要时进行故障排除。
+
+### HTTP 端点
+
+#### 容器
+
+* **/containers**
+
+    **URL 结构**
+    ```
+    GET /api/v1/containers
+    ```
+
+    **参数**
+
+    * prevKey (可选)
+    
+        只回传ID大于给定的prevKey的容器。
+        范例:prevKey=1
+
+    * limit (可选)
+    
+        只回传有限数量的结果。默认限制是1000。
+    
+    **回传**
+    
+    回传所有 ContainerMetadata 对象。
+    
+    ```json
+    {
+      "data": {
+        "totalCount": 3,
+        "containers": [
+          {
+            "ContainerID": 1,
+            "NumberOfKeys": 834
+          },
+          {
+            "ContainerID": 2,
+            "NumberOfKeys": 833
+          },
+          {
+            "ContainerID": 3,
+            "NumberOfKeys": 833
+          }
+        ]
+      }
+    }
+    ```
+
+* **/containers/:id/keys**
+
+    **URL 结构**
+    ```
+    GET /api/v1/containers/:id/keys
+    ```
+    
+    **参数**
+    
+    * prevKey (可选)
+     
+        只回传在给定的 prevKey 键前缀之后的键。
+        范例:prevKey=/vol1/bucket1/key1
+        
+    * limit (可选)
+    
+        只回传有限数量的结果。默认限制是1000。
+        
+    **回传**
+    
+    回传给定容器 ID 的所有 KeyMetadata 对象。
+    
+    ```json
+    {
+      "totalCount":7,
+      "keys": [
+        {
+          "Volume":"vol-1-73141",
+          "Bucket":"bucket-3-35816",
+          "Key":"key-0-43637",
+          "DataSize":1000,
+          "Versions":[0],
+          "Blocks": {
+            "0": [
+              {
+                "containerID":1,
+                "localID":105232659753992201
+              }
+            ]
+          },
+          "CreationTime":"2020-11-18T18:09:17.722Z",
+          "ModificationTime":"2020-11-18T18:09:30.405Z"
+        },
+        ...
+      ]
+    }
+    ```
+* **/containers/missing**
+    
+    **URL 结构**
+    ```
+    GET /api/v1/containers/missing
+    ```
+    
+    **参数**
+    
+    没有参数。
+    
+    **回传**
+    
+    回传所有丢失容器的 MissingContainerMetadata 对象。
+    
+    ```json
+    {
+    	"totalCount": 26,
+    	"containers": [{
+    		"containerID": 1,
+    		"missingSince": 1605731029145,
+    		"keys": 7,
+    		"pipelineID": "88646d32-a1aa-4e1a",
+    		"replicas": [{
+    			"containerId": 1,
+    			"datanodeHost": "localhost-1",
+    			"firstReportTimestamp": 1605724047057,
+    			"lastReportTimestamp": 1605731201301
+    		}, 
+            ...
+            ]
+    	},
+        ...
+        ]
+    }
+    ```
+* **/containers/:id/replicaHistory**
+
+    **URL 结构**
+    ```
+    GET /api/v1/containers/:id/replicaHistory
+    ```
+    
+    **参数**
+    
+    没有参数。
+    
+    **回传**
+
+    回传给定容器 ID 的所有 ContainerHistory 对象。
+    
+    ```json
+    [
+      {
+        "containerId": 1,
+        "datanodeHost": "localhost-1",
+        "firstReportTimestamp": 1605724047057,
+        "lastReportTimestamp": 1605730421294
+      },
+      ...
+    ]
+    ```
+* **/containers/unhealthy**
+
+    **URL 结构**
+     ```
+     GET /api/v1/containers/unhealthy
+     ```
+     
+    **参数**
+    
+    * batchNum (可选)
+
+        回传结果的批号(如“页码”)。
+        传递1,将回传记录1以限制。传递2,将回传limit + 1 to 2 * limit,等等。
+        
+    * limit (可选)
+    
+        只回传有限数量的结果。默认限制是1000。
+        
+    **回传**
+    
+    回传所有不健康容器的 UnhealthyContainerMetadata 对象。
+    
+     ```json
+     {
+     	"missingCount": 2,
+     	"underReplicatedCount": 0,
+     	"overReplicatedCount": 0,
+     	"misReplicatedCount": 0,
+     	"containers": [{
+     		"containerID": 1,
+     		"containerState": "MISSING",
+     		"unhealthySince": 1605731029145,
+     		"expectedReplicaCount": 3,
+     		"actualReplicaCount": 0,
+     		"replicaDeltaCount": 3,
+     		"reason": null,
+     		"keys": 7,
+     		"pipelineID": "88646d32-a1aa-4e1a",
+     		"replicas": [{
+     			"containerId": 1,
+     			"datanodeHost": "localhost-1",
+     			"firstReportTimestamp": 1605722960125,
+     			"lastReportTimestamp": 1605731230509
+     		}, 
+            ...
+            ]
+     	},
+        ...
+        ]
+     } 
+     ```
+     
+* **/containers/unhealthy/:state**
+
+    **URL 结构**
+    ```
+    GET /api/v1/containers/unhealthy/:state
+    ```
+     
+    **参数**
+    
+    * batchNum (可选)
+    
+        回传结果的批号(如“页码”)。
+        传递1,将回传记录1以限制。传递2,将回传limit + 1 to 2 * limit,等等。
+        
+    * limit (可选)
+    
+        只回传有限数量的结果。默认限制是1000。
+        
+    **回传**
+    
+    回传处于给定状态的容器的 UnhealthyContainerMetadata 对象。
+    可能有不健康的容器状态为`MISSING`, `MIS_REPLICATED`, `UNDER_REPLICATED`, `OVER_REPLICATED`.

Review comment:
       Solved it

##########
File path: hadoop-hdds/docs/content/feature/Recon.zh.md
##########
@@ -23,27 +23,10 @@ summary: Recon 是 Ozone 中用于分析服务的网页用户界面(Web UI)
   limitations under the License.
 -->
 
-Recon 是 Ozone 中用于分析服务的网页用户界面(Web UI)。它是一个可选组件,但强烈建议您使用,因为它可以增加可视性。
+Recon 作为 Ozone 的管理和监听控制台。它是一个可选组件,但强烈建议将其添加到集群中,因为 Recon 可以在关键时刻帮助您对集群进行故障排除。请参阅 [Recon 架构]({{< ref "concept/Recon.zh.md" >}})以获得详细的架构概述和 HTTP API 参考的 [Recon API]({{< ref path="interface/ReconApi.zh.md" >}}) 文档。

Review comment:
       Solved it

##########
File path: hadoop-hdds/docs/content/interface/ReconApi.zh.md
##########
@@ -0,0 +1,498 @@
+---
+title: Recon API
+weight: 4
+menu:
+   main:
+      parent: "编程接口"
+summary: Recon 服务器支持 HTTP 端点,以帮助故障排除和监听 Ozone 集群。
+---
+
+<!---
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+Recon API v1 是一组 HTTP 端点,可以帮助您了解 Ozone 集群的当前状态,并在需要时进行故障排除。
+
+### HTTP 端点
+
+#### 容器
+
+* **/containers**
+
+    **URL 结构**
+    ```
+    GET /api/v1/containers
+    ```
+
+    **参数**
+
+    * prevKey (可选)
+    
+        只回传ID大于给定的prevKey的容器。
+        范例:prevKey=1
+
+    * limit (可选)
+    
+        只回传有限数量的结果。默认限制是1000。
+    
+    **回传**
+    
+    回传所有 ContainerMetadata 对象。
+    
+    ```json
+    {
+      "data": {
+        "totalCount": 3,
+        "containers": [
+          {
+            "ContainerID": 1,
+            "NumberOfKeys": 834
+          },
+          {
+            "ContainerID": 2,
+            "NumberOfKeys": 833
+          },
+          {
+            "ContainerID": 3,
+            "NumberOfKeys": 833
+          }
+        ]
+      }
+    }
+    ```
+
+* **/containers/:id/keys**
+
+    **URL 结构**
+    ```
+    GET /api/v1/containers/:id/keys
+    ```
+    
+    **参数**
+    
+    * prevKey (可选)
+     
+        只回传在给定的 prevKey 键前缀之后的键。
+        范例:prevKey=/vol1/bucket1/key1

Review comment:
       Solved it

##########
File path: hadoop-hdds/docs/content/interface/ReconApi.zh.md
##########
@@ -0,0 +1,498 @@
+---
+title: Recon API
+weight: 4
+menu:
+   main:
+      parent: "编程接口"
+summary: Recon 服务器支持 HTTP 端点,以帮助故障排除和监听 Ozone 集群。
+---
+
+<!---
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+Recon API v1 是一组 HTTP 端点,可以帮助您了解 Ozone 集群的当前状态,并在需要时进行故障排除。
+
+### HTTP 端点
+
+#### 容器
+
+* **/containers**
+
+    **URL 结构**
+    ```
+    GET /api/v1/containers
+    ```
+
+    **参数**
+
+    * prevKey (可选)
+    
+        只回传ID大于给定的prevKey的容器。

Review comment:
       Solved it

##########
File path: hadoop-hdds/docs/content/interface/ReconApi.zh.md
##########
@@ -0,0 +1,498 @@
+---
+title: Recon API
+weight: 4
+menu:
+   main:
+      parent: "编程接口"
+summary: Recon 服务器支持 HTTP 端点,以帮助故障排除和监听 Ozone 集群。
+---
+
+<!---
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+Recon API v1 是一组 HTTP 端点,可以帮助您了解 Ozone 集群的当前状态,并在需要时进行故障排除。
+
+### HTTP 端点
+
+#### 容器
+
+* **/containers**
+
+    **URL 结构**
+    ```
+    GET /api/v1/containers
+    ```
+
+    **参数**
+
+    * prevKey (可选)
+    
+        只回传ID大于给定的prevKey的容器。
+        范例:prevKey=1

Review comment:
       Solved it

##########
File path: hadoop-hdds/docs/content/interface/ReconApi.zh.md
##########
@@ -0,0 +1,498 @@
+---
+title: Recon API
+weight: 4
+menu:
+   main:
+      parent: "编程接口"
+summary: Recon 服务器支持 HTTP 端点,以帮助故障排除和监听 Ozone 集群。
+---
+
+<!---
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+Recon API v1 是一组 HTTP 端点,可以帮助您了解 Ozone 集群的当前状态,并在需要时进行故障排除。
+
+### HTTP 端点
+
+#### 容器
+
+* **/containers**
+
+    **URL 结构**
+    ```
+    GET /api/v1/containers
+    ```
+
+    **参数**
+
+    * prevKey (可选)
+    
+        只回传ID大于给定的prevKey的容器。
+        范例:prevKey=1
+
+    * limit (可选)
+    
+        只回传有限数量的结果。默认限制是1000。
+    
+    **回传**
+    
+    回传所有 ContainerMetadata 对象。
+    
+    ```json
+    {
+      "data": {
+        "totalCount": 3,
+        "containers": [
+          {
+            "ContainerID": 1,
+            "NumberOfKeys": 834
+          },
+          {
+            "ContainerID": 2,
+            "NumberOfKeys": 833
+          },
+          {
+            "ContainerID": 3,
+            "NumberOfKeys": 833
+          }
+        ]
+      }
+    }
+    ```
+
+* **/containers/:id/keys**
+
+    **URL 结构**
+    ```
+    GET /api/v1/containers/:id/keys
+    ```
+    
+    **参数**
+    
+    * prevKey (可选)
+     
+        只回传在给定的 prevKey 键前缀之后的键。
+        范例:prevKey=/vol1/bucket1/key1
+        
+    * limit (可选)
+    
+        只回传有限数量的结果。默认限制是1000。
+        
+    **回传**
+    
+    回传给定容器 ID 的所有 KeyMetadata 对象。
+    
+    ```json
+    {
+      "totalCount":7,
+      "keys": [
+        {
+          "Volume":"vol-1-73141",
+          "Bucket":"bucket-3-35816",
+          "Key":"key-0-43637",
+          "DataSize":1000,
+          "Versions":[0],
+          "Blocks": {
+            "0": [
+              {
+                "containerID":1,
+                "localID":105232659753992201
+              }
+            ]
+          },
+          "CreationTime":"2020-11-18T18:09:17.722Z",
+          "ModificationTime":"2020-11-18T18:09:30.405Z"
+        },
+        ...
+      ]
+    }
+    ```
+* **/containers/missing**
+    
+    **URL 结构**
+    ```
+    GET /api/v1/containers/missing
+    ```
+    
+    **参数**
+    
+    没有参数。
+    
+    **回传**
+    
+    回传所有丢失容器的 MissingContainerMetadata 对象。
+    
+    ```json
+    {
+    	"totalCount": 26,
+    	"containers": [{
+    		"containerID": 1,
+    		"missingSince": 1605731029145,
+    		"keys": 7,
+    		"pipelineID": "88646d32-a1aa-4e1a",
+    		"replicas": [{
+    			"containerId": 1,
+    			"datanodeHost": "localhost-1",
+    			"firstReportTimestamp": 1605724047057,
+    			"lastReportTimestamp": 1605731201301
+    		}, 
+            ...
+            ]
+    	},
+        ...
+        ]
+    }
+    ```
+* **/containers/:id/replicaHistory**
+
+    **URL 结构**
+    ```
+    GET /api/v1/containers/:id/replicaHistory
+    ```
+    
+    **参数**
+    
+    没有参数。
+    
+    **回传**
+
+    回传给定容器 ID 的所有 ContainerHistory 对象。
+    
+    ```json
+    [
+      {
+        "containerId": 1,
+        "datanodeHost": "localhost-1",
+        "firstReportTimestamp": 1605724047057,
+        "lastReportTimestamp": 1605730421294
+      },
+      ...
+    ]
+    ```
+* **/containers/unhealthy**
+
+    **URL 结构**
+     ```
+     GET /api/v1/containers/unhealthy
+     ```
+     
+    **参数**
+    
+    * batchNum (可选)
+
+        回传结果的批号(如“页码”)。
+        传递1,将回传记录1以限制。传递2,将回传limit + 1 to 2 * limit,等等。
+        
+    * limit (可选)
+    
+        只回传有限数量的结果。默认限制是1000。
+        
+    **回传**
+    
+    回传所有不健康容器的 UnhealthyContainerMetadata 对象。
+    
+     ```json
+     {
+     	"missingCount": 2,
+     	"underReplicatedCount": 0,
+     	"overReplicatedCount": 0,
+     	"misReplicatedCount": 0,
+     	"containers": [{
+     		"containerID": 1,
+     		"containerState": "MISSING",
+     		"unhealthySince": 1605731029145,
+     		"expectedReplicaCount": 3,
+     		"actualReplicaCount": 0,
+     		"replicaDeltaCount": 3,
+     		"reason": null,
+     		"keys": 7,
+     		"pipelineID": "88646d32-a1aa-4e1a",
+     		"replicas": [{
+     			"containerId": 1,
+     			"datanodeHost": "localhost-1",
+     			"firstReportTimestamp": 1605722960125,
+     			"lastReportTimestamp": 1605731230509
+     		}, 
+            ...
+            ]
+     	},
+        ...
+        ]
+     } 
+     ```
+     
+* **/containers/unhealthy/:state**
+
+    **URL 结构**
+    ```
+    GET /api/v1/containers/unhealthy/:state
+    ```
+     
+    **参数**
+    
+    * batchNum (可选)
+    
+        回传结果的批号(如“页码”)。
+        传递1,将回传记录1以限制。传递2,将回传limit + 1 to 2 * limit,等等。
+        
+    * limit (可选)
+    
+        只回传有限数量的结果。默认限制是1000。
+        
+    **回传**
+    
+    回传处于给定状态的容器的 UnhealthyContainerMetadata 对象。
+    可能有不健康的容器状态为`MISSING`, `MIS_REPLICATED`, `UNDER_REPLICATED`, `OVER_REPLICATED`.
+    响应结构与`/containers/unhealthy`相同

Review comment:
       Solved it

##########
File path: hadoop-hdds/docs/content/concept/Recon.zh.md
##########
@@ -0,0 +1,117 @@
+---
+title: "Recon"
+date: "2020-10-27"
+weight: 8
+menu: 
+  main:
+     parent: 概念
+summary: Recon 作为 Ozone 的管理和监视控制台。
+---
+<!---
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+Recon 充当 Ozone 的管理和监视控制台。它提供了 Ozone 的鸟瞰图,并通过基于 REST 的 API 和丰富的网页用户界面(Web UI)展示了集群的当前状态,从而帮助用户解决了任何问题。
+
+
+## 高层次设计
+
+{{<figure src="/concept/ReconHighLevelDesign.png" width="800px">}}
+
+<br/>
+
+在较高的层次上,Recon 从 Ozone Manager(OM)收集和汇总元数据,Storage Container Manager(SCM)和 Datanodes(DN)充当中央管理和监视控制台。Ozone 管理员可以使用 Recon 查询系统的当前状态,而不会使 OM  或 SCM 过载。
+
+Recon维护多个数据库,以支持批处理,更快的查询和持久化聚合信息。它维护 OM DB 和 SCM DB 的本地副本,以及用于持久存储聚合信息的 SQL 数据库。
+
+Recon 还与 Prometheus 集成,提供一个 HTTP 端点来查询 Prometheus 的 Ozone 指标,并在网页用户界面(Web UI)中显示一些关键的时间点指标。

Review comment:
       Solved it

##########
File path: hadoop-hdds/docs/content/concept/Recon.zh.md
##########
@@ -0,0 +1,117 @@
+---
+title: "Recon"
+date: "2020-10-27"
+weight: 8
+menu: 
+  main:
+     parent: 概念
+summary: Recon 作为 Ozone 的管理和监视控制台。
+---
+<!---
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+Recon 充当 Ozone 的管理和监视控制台。它提供了 Ozone 的鸟瞰图,并通过基于 REST 的 API 和丰富的网页用户界面(Web UI)展示了集群的当前状态,从而帮助用户解决了任何问题。
+
+
+## 高层次设计
+
+{{<figure src="/concept/ReconHighLevelDesign.png" width="800px">}}
+
+<br/>
+
+在较高的层次上,Recon 从 Ozone Manager(OM)收集和汇总元数据,Storage Container Manager(SCM)和 Datanodes(DN)充当中央管理和监视控制台。Ozone 管理员可以使用 Recon 查询系统的当前状态,而不会使 OM  或 SCM 过载。
+
+Recon维护多个数据库,以支持批处理,更快的查询和持久化聚合信息。它维护 OM DB 和 SCM DB 的本地副本,以及用于持久存储聚合信息的 SQL 数据库。
+
+Recon 还与 Prometheus 集成,提供一个 HTTP 端点来查询 Prometheus 的 Ozone 指标,并在网页用户界面(Web UI)中显示一些关键的时间点指标。
+
+## Recon 和 Ozone Manager
+
+{{<figure src="/concept/ReconOmDesign.png" width="800px">}}
+
+<br/>
+
+Recon 最初从领导者 OM 的 HTTP 端点获取 OM rocks DB 的完整快照,解压缩文件并初始化 RocksDB 以进行本地查询。通过对最后一个应用的序列 ID ,RPC calls 定期请求领导者 OM 进行增量更新,从而使数据库保持同步。如果由于某种原因而无法检索增量更新或将其应用于本地数据库,则再次请求完整快照以使本地数据库与 OM DB 保持同步。因此,Recon 可以显示陈旧的信息,因为本地数据库不会总是同步。从 OM 检索到的数据库更新,然后转换为一批事件,以便 OM DB 任务通过 [Recon 任务框架](#task-framework) 进行进一步处理。
+
+## Recon 和 Storage Container Manager
+
+{{<figure src="/concept/ReconScmDesign.png" width="800px">}}
+
+<br/>
+
+Recon 还充当数据节点的被动 SCM。在集群中配置 Recon 时,所有数据节点都向 Recon 注册,并像 SCM 一样向 Recon 发送心跳、容器报告、增量容器报告等。Recon 使用它从数据节点得到的所有信息在本地构建自己的 SCM rocks DB 副本。Recon 从不向数据节点发送任何命令作为响应,而只是充当被动 SCM 以更快地查找 SCM 元数据。
+
+## <a name="task-framework"></a> 任务框架
+
+Recon 有其自己的任务框架,可对从 OM 和 SCM 获得的数据进行批处理。一个任务可以在 OM DB 或 SCM DB 上监听和操作数据库事件,如`PUT`、`DELETE`、`UPDATE`等。在此基础上,任务实现`org.apache.hadoop.ozone.recon.tasks.ReconOmTask`或者扩展`org.apache.hadoop.ozone.recon.scm.ReconScmTask`。
+
+`ReconOmTask`的示例是`ContainerKeyMapperTask`,它在 RocksDB 中保留了容器 -> 键映射。当报告容器丢失或处于不健康运行状况的状态时,这有助于了解哪些键是容器的一部分。另一个示例是`FileSizeCountTask`,它跟踪 SQL 数据库中给定文件大小范围内的文件计数。这些任务具有两种情况的实现:
+ 
+ - 完整快照(reprocess())
+ - 增量更新(process())
+ 
+当从领导者 OM 获得 OM DB 的完整快照时,将对所有注册的 OM 任务调用 reprocess()。在随后的增量更新中,将在这些 OM 任务上调用 process()。
+
+`ReconScmTask`的示例是`ContainerHealthTask`,它以可配置的时间间隔运行,扫描所有容器的列表,并将不健康容器的状态(`MISSING`,`MIS_REPLICATED`,`UNDER_REPLICATED`,`OVER_REPLICATED`)保留在 SQL 表中。此信息用于确定集群中是否有丢失的容器。
+
+## Recon 和 Prometheus
+
+Recon 可以与配置为收集指标的任何 Prometheus 实例集成,并且可以在数据节点和 Pipelines 页面的 Recon UI 中显示有用的信息。Recon 还公开了一个代理端点 ([/metrics]({{< ref path="interface/ReconApi.zh.md#metrics" >}})) 来查询 Prometheus。可以通过将此配置`ozone.recon.prometheus.http.endpoint`设置为 Prometheus 端点如`ozone.recon.prometheus.http.endpoint=localhost:9090`来启用此集成。
+
+## API 参考
+
+[链接到完整的 API 参考]({{< ref path="interface/ReconApi.zh.md" >}})
+   
+## 持续状态
+
+ * [OM database]({{< ref "concept/OzoneManager.zh.md#persisted-state" >}})的本地副本
+ * [SCM database]({{< ref "concept/StorageContainerManager.zh.md#persisted-state" >}})的本地副本
+ * 以下数据将保留在指定 RocksDB 目录中的 Recon 中: 

Review comment:
       Solved it

##########
File path: hadoop-hdds/docs/content/concept/Recon.zh.md
##########
@@ -0,0 +1,117 @@
+---
+title: "Recon"
+date: "2020-10-27"
+weight: 8
+menu: 
+  main:
+     parent: 概念
+summary: Recon 作为 Ozone 的管理和监视控制台。
+---
+<!---
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+Recon 充当 Ozone 的管理和监视控制台。它提供了 Ozone 的鸟瞰图,并通过基于 REST 的 API 和丰富的网页用户界面(Web UI)展示了集群的当前状态,从而帮助用户解决了任何问题。
+
+
+## 高层次设计
+
+{{<figure src="/concept/ReconHighLevelDesign.png" width="800px">}}
+
+<br/>
+
+在较高的层次上,Recon 从 Ozone Manager(OM)收集和汇总元数据,Storage Container Manager(SCM)和 Datanodes(DN)充当中央管理和监视控制台。Ozone 管理员可以使用 Recon 查询系统的当前状态,而不会使 OM  或 SCM 过载。
+
+Recon维护多个数据库,以支持批处理,更快的查询和持久化聚合信息。它维护 OM DB 和 SCM DB 的本地副本,以及用于持久存储聚合信息的 SQL 数据库。
+
+Recon 还与 Prometheus 集成,提供一个 HTTP 端点来查询 Prometheus 的 Ozone 指标,并在网页用户界面(Web UI)中显示一些关键的时间点指标。
+
+## Recon 和 Ozone Manager
+
+{{<figure src="/concept/ReconOmDesign.png" width="800px">}}
+
+<br/>
+
+Recon 最初从领导者 OM 的 HTTP 端点获取 OM rocks DB 的完整快照,解压缩文件并初始化 RocksDB 以进行本地查询。通过对最后一个应用的序列 ID ,RPC calls 定期请求领导者 OM 进行增量更新,从而使数据库保持同步。如果由于某种原因而无法检索增量更新或将其应用于本地数据库,则再次请求完整快照以使本地数据库与 OM DB 保持同步。因此,Recon 可以显示陈旧的信息,因为本地数据库不会总是同步。从 OM 检索到的数据库更新,然后转换为一批事件,以便 OM DB 任务通过 [Recon 任务框架](#task-framework) 进行进一步处理。
+
+## Recon 和 Storage Container Manager
+
+{{<figure src="/concept/ReconScmDesign.png" width="800px">}}
+
+<br/>
+
+Recon 还充当数据节点的被动 SCM。在集群中配置 Recon 时,所有数据节点都向 Recon 注册,并像 SCM 一样向 Recon 发送心跳、容器报告、增量容器报告等。Recon 使用它从数据节点得到的所有信息在本地构建自己的 SCM rocks DB 副本。Recon 从不向数据节点发送任何命令作为响应,而只是充当被动 SCM 以更快地查找 SCM 元数据。
+
+## <a name="task-framework"></a> 任务框架
+
+Recon 有其自己的任务框架,可对从 OM 和 SCM 获得的数据进行批处理。一个任务可以在 OM DB 或 SCM DB 上监听和操作数据库事件,如`PUT`、`DELETE`、`UPDATE`等。在此基础上,任务实现`org.apache.hadoop.ozone.recon.tasks.ReconOmTask`或者扩展`org.apache.hadoop.ozone.recon.scm.ReconScmTask`。
+
+`ReconOmTask`的示例是`ContainerKeyMapperTask`,它在 RocksDB 中保留了容器 -> 键映射。当报告容器丢失或处于不健康运行状况的状态时,这有助于了解哪些键是容器的一部分。另一个示例是`FileSizeCountTask`,它跟踪 SQL 数据库中给定文件大小范围内的文件计数。这些任务具有两种情况的实现:
+ 
+ - 完整快照(reprocess())
+ - 增量更新(process())
+ 
+当从领导者 OM 获得 OM DB 的完整快照时,将对所有注册的 OM 任务调用 reprocess()。在随后的增量更新中,将在这些 OM 任务上调用 process()。
+
+`ReconScmTask`的示例是`ContainerHealthTask`,它以可配置的时间间隔运行,扫描所有容器的列表,并将不健康容器的状态(`MISSING`,`MIS_REPLICATED`,`UNDER_REPLICATED`,`OVER_REPLICATED`)保留在 SQL 表中。此信息用于确定集群中是否有丢失的容器。
+
+## Recon 和 Prometheus
+
+Recon 可以与配置为收集指标的任何 Prometheus 实例集成,并且可以在数据节点和 Pipelines 页面的 Recon UI 中显示有用的信息。Recon 还公开了一个代理端点 ([/metrics]({{< ref path="interface/ReconApi.zh.md#metrics" >}})) 来查询 Prometheus。可以通过将此配置`ozone.recon.prometheus.http.endpoint`设置为 Prometheus 端点如`ozone.recon.prometheus.http.endpoint=localhost:9090`来启用此集成。
+
+## API 参考
+
+[链接到完整的 API 参考]({{< ref path="interface/ReconApi.zh.md" >}})
+   
+## 持续状态

Review comment:
       Solved it

##########
File path: hadoop-hdds/docs/content/concept/Recon.zh.md
##########
@@ -0,0 +1,117 @@
+---
+title: "Recon"
+date: "2020-10-27"
+weight: 8
+menu: 
+  main:
+     parent: 概念
+summary: Recon 作为 Ozone 的管理和监视控制台。
+---
+<!---
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+Recon 充当 Ozone 的管理和监视控制台。它提供了 Ozone 的鸟瞰图,并通过基于 REST 的 API 和丰富的网页用户界面(Web UI)展示了集群的当前状态,从而帮助用户解决了任何问题。
+
+
+## 高层次设计
+
+{{<figure src="/concept/ReconHighLevelDesign.png" width="800px">}}
+
+<br/>
+
+在较高的层次上,Recon 从 Ozone Manager(OM)收集和汇总元数据,Storage Container Manager(SCM)和 Datanodes(DN)充当中央管理和监视控制台。Ozone 管理员可以使用 Recon 查询系统的当前状态,而不会使 OM  或 SCM 过载。
+
+Recon维护多个数据库,以支持批处理,更快的查询和持久化聚合信息。它维护 OM DB 和 SCM DB 的本地副本,以及用于持久存储聚合信息的 SQL 数据库。
+
+Recon 还与 Prometheus 集成,提供一个 HTTP 端点来查询 Prometheus 的 Ozone 指标,并在网页用户界面(Web UI)中显示一些关键的时间点指标。
+
+## Recon 和 Ozone Manager
+
+{{<figure src="/concept/ReconOmDesign.png" width="800px">}}
+
+<br/>
+
+Recon 最初从领导者 OM 的 HTTP 端点获取 OM rocks DB 的完整快照,解压缩文件并初始化 RocksDB 以进行本地查询。通过对最后一个应用的序列 ID ,RPC calls 定期请求领导者 OM 进行增量更新,从而使数据库保持同步。如果由于某种原因而无法检索增量更新或将其应用于本地数据库,则再次请求完整快照以使本地数据库与 OM DB 保持同步。因此,Recon 可以显示陈旧的信息,因为本地数据库不会总是同步。从 OM 检索到的数据库更新,然后转换为一批事件,以便 OM DB 任务通过 [Recon 任务框架](#task-framework) 进行进一步处理。
+
+## Recon 和 Storage Container Manager
+
+{{<figure src="/concept/ReconScmDesign.png" width="800px">}}
+
+<br/>
+
+Recon 还充当数据节点的被动 SCM。在集群中配置 Recon 时,所有数据节点都向 Recon 注册,并像 SCM 一样向 Recon 发送心跳、容器报告、增量容器报告等。Recon 使用它从数据节点得到的所有信息在本地构建自己的 SCM rocks DB 副本。Recon 从不向数据节点发送任何命令作为响应,而只是充当被动 SCM 以更快地查找 SCM 元数据。
+
+## <a name="task-framework"></a> 任务框架
+
+Recon 有其自己的任务框架,可对从 OM 和 SCM 获得的数据进行批处理。一个任务可以在 OM DB 或 SCM DB 上监听和操作数据库事件,如`PUT`、`DELETE`、`UPDATE`等。在此基础上,任务实现`org.apache.hadoop.ozone.recon.tasks.ReconOmTask`或者扩展`org.apache.hadoop.ozone.recon.scm.ReconScmTask`。
+
+`ReconOmTask`的示例是`ContainerKeyMapperTask`,它在 RocksDB 中保留了容器 -> 键映射。当报告容器丢失或处于不健康运行状况的状态时,这有助于了解哪些键是容器的一部分。另一个示例是`FileSizeCountTask`,它跟踪 SQL 数据库中给定文件大小范围内的文件计数。这些任务具有两种情况的实现:
+ 
+ - 完整快照(reprocess())
+ - 增量更新(process())
+ 
+当从领导者 OM 获得 OM DB 的完整快照时,将对所有注册的 OM 任务调用 reprocess()。在随后的增量更新中,将在这些 OM 任务上调用 process()。
+
+`ReconScmTask`的示例是`ContainerHealthTask`,它以可配置的时间间隔运行,扫描所有容器的列表,并将不健康容器的状态(`MISSING`,`MIS_REPLICATED`,`UNDER_REPLICATED`,`OVER_REPLICATED`)保留在 SQL 表中。此信息用于确定集群中是否有丢失的容器。
+
+## Recon 和 Prometheus
+
+Recon 可以与配置为收集指标的任何 Prometheus 实例集成,并且可以在数据节点和 Pipelines 页面的 Recon UI 中显示有用的信息。Recon 还公开了一个代理端点 ([/metrics]({{< ref path="interface/ReconApi.zh.md#metrics" >}})) 来查询 Prometheus。可以通过将此配置`ozone.recon.prometheus.http.endpoint`设置为 Prometheus 端点如`ozone.recon.prometheus.http.endpoint=localhost:9090`来启用此集成。
+
+## API 参考
+
+[链接到完整的 API 参考]({{< ref path="interface/ReconApi.zh.md" >}})
+   
+## 持续状态
+
+ * [OM database]({{< ref "concept/OzoneManager.zh.md#persisted-state" >}})的本地副本
+ * [SCM database]({{< ref "concept/StorageContainerManager.zh.md#persisted-state" >}})的本地副本
+ * 以下数据将保留在指定 RocksDB 目录中的 Recon 中: 
+     * ContainerKey 表
+         * 存储映射(容器,键) -> 计数
+     * ContainerKeyCount 表
+         * 存储容器 ID  -> 容器内的键数
+ * 以下数据存储在已配置的 SQL 数据库中(默认为 Derby ):
+     * GlobalStats 表
+         * 一个键 -> Value table 用于存储集群中出现的卷/桶/键的总数等聚合信息
+     * FileCountBySize 表
+         * 跟踪集群中文件大小范围内的文件数量
+     * ReconTaskStatus 表
+         * 在[Recon 任务框架](#task-framework)中跟踪已注册的 OM 和 SCM DB 任务的状态和最后运行时间戳
+     * ContainerHistory 表
+         * 存储容器副本 -> 具有最新已知时间戳记的数据节点映射。用于确定报告容器丢失时的最后一个已知数据节点

Review comment:
       Solved it

##########
File path: hadoop-hdds/docs/content/concept/Recon.zh.md
##########
@@ -0,0 +1,117 @@
+---
+title: "Recon"
+date: "2020-10-27"
+weight: 8
+menu: 
+  main:
+     parent: 概念
+summary: Recon 作为 Ozone 的管理和监视控制台。
+---
+<!---
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+Recon 充当 Ozone 的管理和监视控制台。它提供了 Ozone 的鸟瞰图,并通过基于 REST 的 API 和丰富的网页用户界面(Web UI)展示了集群的当前状态,从而帮助用户解决了任何问题。
+
+
+## 高层次设计
+
+{{<figure src="/concept/ReconHighLevelDesign.png" width="800px">}}
+
+<br/>
+
+在较高的层次上,Recon 从 Ozone Manager(OM)收集和汇总元数据,Storage Container Manager(SCM)和 Datanodes(DN)充当中央管理和监视控制台。Ozone 管理员可以使用 Recon 查询系统的当前状态,而不会使 OM  或 SCM 过载。
+
+Recon维护多个数据库,以支持批处理,更快的查询和持久化聚合信息。它维护 OM DB 和 SCM DB 的本地副本,以及用于持久存储聚合信息的 SQL 数据库。
+
+Recon 还与 Prometheus 集成,提供一个 HTTP 端点来查询 Prometheus 的 Ozone 指标,并在网页用户界面(Web UI)中显示一些关键的时间点指标。
+
+## Recon 和 Ozone Manager
+
+{{<figure src="/concept/ReconOmDesign.png" width="800px">}}
+
+<br/>
+
+Recon 最初从领导者 OM 的 HTTP 端点获取 OM rocks DB 的完整快照,解压缩文件并初始化 RocksDB 以进行本地查询。通过对最后一个应用的序列 ID ,RPC calls 定期请求领导者 OM 进行增量更新,从而使数据库保持同步。如果由于某种原因而无法检索增量更新或将其应用于本地数据库,则再次请求完整快照以使本地数据库与 OM DB 保持同步。因此,Recon 可以显示陈旧的信息,因为本地数据库不会总是同步。从 OM 检索到的数据库更新,然后转换为一批事件,以便 OM DB 任务通过 [Recon 任务框架](#task-framework) 进行进一步处理。
+
+## Recon 和 Storage Container Manager
+
+{{<figure src="/concept/ReconScmDesign.png" width="800px">}}
+
+<br/>
+
+Recon 还充当数据节点的被动 SCM。在集群中配置 Recon 时,所有数据节点都向 Recon 注册,并像 SCM 一样向 Recon 发送心跳、容器报告、增量容器报告等。Recon 使用它从数据节点得到的所有信息在本地构建自己的 SCM rocks DB 副本。Recon 从不向数据节点发送任何命令作为响应,而只是充当被动 SCM 以更快地查找 SCM 元数据。
+
+## <a name="task-framework"></a> 任务框架
+
+Recon 有其自己的任务框架,可对从 OM 和 SCM 获得的数据进行批处理。一个任务可以在 OM DB 或 SCM DB 上监听和操作数据库事件,如`PUT`、`DELETE`、`UPDATE`等。在此基础上,任务实现`org.apache.hadoop.ozone.recon.tasks.ReconOmTask`或者扩展`org.apache.hadoop.ozone.recon.scm.ReconScmTask`。
+
+`ReconOmTask`的示例是`ContainerKeyMapperTask`,它在 RocksDB 中保留了容器 -> 键映射。当报告容器丢失或处于不健康运行状况的状态时,这有助于了解哪些键是容器的一部分。另一个示例是`FileSizeCountTask`,它跟踪 SQL 数据库中给定文件大小范围内的文件计数。这些任务具有两种情况的实现:
+ 
+ - 完整快照(reprocess())
+ - 增量更新(process())
+ 
+当从领导者 OM 获得 OM DB 的完整快照时,将对所有注册的 OM 任务调用 reprocess()。在随后的增量更新中,将在这些 OM 任务上调用 process()。
+
+`ReconScmTask`的示例是`ContainerHealthTask`,它以可配置的时间间隔运行,扫描所有容器的列表,并将不健康容器的状态(`MISSING`,`MIS_REPLICATED`,`UNDER_REPLICATED`,`OVER_REPLICATED`)保留在 SQL 表中。此信息用于确定集群中是否有丢失的容器。
+
+## Recon 和 Prometheus
+
+Recon 可以与配置为收集指标的任何 Prometheus 实例集成,并且可以在数据节点和 Pipelines 页面的 Recon UI 中显示有用的信息。Recon 还公开了一个代理端点 ([/metrics]({{< ref path="interface/ReconApi.zh.md#metrics" >}})) 来查询 Prometheus。可以通过将此配置`ozone.recon.prometheus.http.endpoint`设置为 Prometheus 端点如`ozone.recon.prometheus.http.endpoint=localhost:9090`来启用此集成。
+
+## API 参考
+
+[链接到完整的 API 参考]({{< ref path="interface/ReconApi.zh.md" >}})
+   
+## 持续状态
+
+ * [OM database]({{< ref "concept/OzoneManager.zh.md#persisted-state" >}})的本地副本
+ * [SCM database]({{< ref "concept/StorageContainerManager.zh.md#persisted-state" >}})的本地副本

Review comment:
       Solved it

##########
File path: hadoop-hdds/docs/content/concept/Recon.zh.md
##########
@@ -0,0 +1,117 @@
+---
+title: "Recon"
+date: "2020-10-27"
+weight: 8
+menu: 
+  main:
+     parent: 概念
+summary: Recon 作为 Ozone 的管理和监视控制台。
+---
+<!---
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+Recon 充当 Ozone 的管理和监视控制台。它提供了 Ozone 的鸟瞰图,并通过基于 REST 的 API 和丰富的网页用户界面(Web UI)展示了集群的当前状态,从而帮助用户解决了任何问题。
+
+
+## 高层次设计
+
+{{<figure src="/concept/ReconHighLevelDesign.png" width="800px">}}
+
+<br/>
+
+在较高的层次上,Recon 从 Ozone Manager(OM)收集和汇总元数据,Storage Container Manager(SCM)和 Datanodes(DN)充当中央管理和监视控制台。Ozone 管理员可以使用 Recon 查询系统的当前状态,而不会使 OM  或 SCM 过载。
+
+Recon维护多个数据库,以支持批处理,更快的查询和持久化聚合信息。它维护 OM DB 和 SCM DB 的本地副本,以及用于持久存储聚合信息的 SQL 数据库。
+
+Recon 还与 Prometheus 集成,提供一个 HTTP 端点来查询 Prometheus 的 Ozone 指标,并在网页用户界面(Web UI)中显示一些关键的时间点指标。
+
+## Recon 和 Ozone Manager
+
+{{<figure src="/concept/ReconOmDesign.png" width="800px">}}
+
+<br/>
+
+Recon 最初从领导者 OM 的 HTTP 端点获取 OM rocks DB 的完整快照,解压缩文件并初始化 RocksDB 以进行本地查询。通过对最后一个应用的序列 ID ,RPC calls 定期请求领导者 OM 进行增量更新,从而使数据库保持同步。如果由于某种原因而无法检索增量更新或将其应用于本地数据库,则再次请求完整快照以使本地数据库与 OM DB 保持同步。因此,Recon 可以显示陈旧的信息,因为本地数据库不会总是同步。从 OM 检索到的数据库更新,然后转换为一批事件,以便 OM DB 任务通过 [Recon 任务框架](#task-framework) 进行进一步处理。
+
+## Recon 和 Storage Container Manager
+
+{{<figure src="/concept/ReconScmDesign.png" width="800px">}}
+
+<br/>
+
+Recon 还充当数据节点的被动 SCM。在集群中配置 Recon 时,所有数据节点都向 Recon 注册,并像 SCM 一样向 Recon 发送心跳、容器报告、增量容器报告等。Recon 使用它从数据节点得到的所有信息在本地构建自己的 SCM rocks DB 副本。Recon 从不向数据节点发送任何命令作为响应,而只是充当被动 SCM 以更快地查找 SCM 元数据。
+
+## <a name="task-framework"></a> 任务框架
+
+Recon 有其自己的任务框架,可对从 OM 和 SCM 获得的数据进行批处理。一个任务可以在 OM DB 或 SCM DB 上监听和操作数据库事件,如`PUT`、`DELETE`、`UPDATE`等。在此基础上,任务实现`org.apache.hadoop.ozone.recon.tasks.ReconOmTask`或者扩展`org.apache.hadoop.ozone.recon.scm.ReconScmTask`。
+
+`ReconOmTask`的示例是`ContainerKeyMapperTask`,它在 RocksDB 中保留了容器 -> 键映射。当报告容器丢失或处于不健康运行状况的状态时,这有助于了解哪些键是容器的一部分。另一个示例是`FileSizeCountTask`,它跟踪 SQL 数据库中给定文件大小范围内的文件计数。这些任务具有两种情况的实现:

Review comment:
       Solved it

##########
File path: hadoop-hdds/docs/content/concept/Recon.zh.md
##########
@@ -0,0 +1,117 @@
+---
+title: "Recon"
+date: "2020-10-27"
+weight: 8
+menu: 
+  main:
+     parent: 概念
+summary: Recon 作为 Ozone 的管理和监视控制台。
+---
+<!---
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+Recon 充当 Ozone 的管理和监视控制台。它提供了 Ozone 的鸟瞰图,并通过基于 REST 的 API 和丰富的网页用户界面(Web UI)展示了集群的当前状态,从而帮助用户解决了任何问题。
+
+
+## 高层次设计
+
+{{<figure src="/concept/ReconHighLevelDesign.png" width="800px">}}
+
+<br/>
+
+在较高的层次上,Recon 从 Ozone Manager(OM)收集和汇总元数据,Storage Container Manager(SCM)和 Datanodes(DN)充当中央管理和监视控制台。Ozone 管理员可以使用 Recon 查询系统的当前状态,而不会使 OM  或 SCM 过载。
+
+Recon维护多个数据库,以支持批处理,更快的查询和持久化聚合信息。它维护 OM DB 和 SCM DB 的本地副本,以及用于持久存储聚合信息的 SQL 数据库。
+
+Recon 还与 Prometheus 集成,提供一个 HTTP 端点来查询 Prometheus 的 Ozone 指标,并在网页用户界面(Web UI)中显示一些关键的时间点指标。
+
+## Recon 和 Ozone Manager
+
+{{<figure src="/concept/ReconOmDesign.png" width="800px">}}
+
+<br/>
+
+Recon 最初从领导者 OM 的 HTTP 端点获取 OM rocks DB 的完整快照,解压缩文件并初始化 RocksDB 以进行本地查询。通过对最后一个应用的序列 ID ,RPC calls 定期请求领导者 OM 进行增量更新,从而使数据库保持同步。如果由于某种原因而无法检索增量更新或将其应用于本地数据库,则再次请求完整快照以使本地数据库与 OM DB 保持同步。因此,Recon 可以显示陈旧的信息,因为本地数据库不会总是同步。从 OM 检索到的数据库更新,然后转换为一批事件,以便 OM DB 任务通过 [Recon 任务框架](#task-framework) 进行进一步处理。
+
+## Recon 和 Storage Container Manager
+
+{{<figure src="/concept/ReconScmDesign.png" width="800px">}}
+
+<br/>
+
+Recon 还充当数据节点的被动 SCM。在集群中配置 Recon 时,所有数据节点都向 Recon 注册,并像 SCM 一样向 Recon 发送心跳、容器报告、增量容器报告等。Recon 使用它从数据节点得到的所有信息在本地构建自己的 SCM rocks DB 副本。Recon 从不向数据节点发送任何命令作为响应,而只是充当被动 SCM 以更快地查找 SCM 元数据。
+
+## <a name="task-framework"></a> 任务框架
+
+Recon 有其自己的任务框架,可对从 OM 和 SCM 获得的数据进行批处理。一个任务可以在 OM DB 或 SCM DB 上监听和操作数据库事件,如`PUT`、`DELETE`、`UPDATE`等。在此基础上,任务实现`org.apache.hadoop.ozone.recon.tasks.ReconOmTask`或者扩展`org.apache.hadoop.ozone.recon.scm.ReconScmTask`。
+
+`ReconOmTask`的示例是`ContainerKeyMapperTask`,它在 RocksDB 中保留了容器 -> 键映射。当报告容器丢失或处于不健康运行状况的状态时,这有助于了解哪些键是容器的一部分。另一个示例是`FileSizeCountTask`,它跟踪 SQL 数据库中给定文件大小范围内的文件计数。这些任务具有两种情况的实现:
+ 
+ - 完整快照(reprocess())
+ - 增量更新(process())
+ 
+当从领导者 OM 获得 OM DB 的完整快照时,将对所有注册的 OM 任务调用 reprocess()。在随后的增量更新中,将在这些 OM 任务上调用 process()。
+
+`ReconScmTask`的示例是`ContainerHealthTask`,它以可配置的时间间隔运行,扫描所有容器的列表,并将不健康容器的状态(`MISSING`,`MIS_REPLICATED`,`UNDER_REPLICATED`,`OVER_REPLICATED`)保留在 SQL 表中。此信息用于确定集群中是否有丢失的容器。
+
+## Recon 和 Prometheus
+
+Recon 可以与配置为收集指标的任何 Prometheus 实例集成,并且可以在数据节点和 Pipelines 页面的 Recon UI 中显示有用的信息。Recon 还公开了一个代理端点 ([/metrics]({{< ref path="interface/ReconApi.zh.md#metrics" >}})) 来查询 Prometheus。可以通过将此配置`ozone.recon.prometheus.http.endpoint`设置为 Prometheus 端点如`ozone.recon.prometheus.http.endpoint=localhost:9090`来启用此集成。
+
+## API 参考
+
+[链接到完整的 API 参考]({{< ref path="interface/ReconApi.zh.md" >}})
+   
+## 持续状态
+
+ * [OM database]({{< ref "concept/OzoneManager.zh.md#persisted-state" >}})的本地副本
+ * [SCM database]({{< ref "concept/StorageContainerManager.zh.md#persisted-state" >}})的本地副本
+ * 以下数据将保留在指定 RocksDB 目录中的 Recon 中: 
+     * ContainerKey 表
+         * 存储映射(容器,键) -> 计数
+     * ContainerKeyCount 表
+         * 存储容器 ID  -> 容器内的键数
+ * 以下数据存储在已配置的 SQL 数据库中(默认为 Derby ):
+     * GlobalStats 表
+         * 一个键 -> Value table 用于存储集群中出现的卷/桶/键的总数等聚合信息
+     * FileCountBySize 表
+         * 跟踪集群中文件大小范围内的文件数量
+     * ReconTaskStatus 表
+         * 在[Recon 任务框架](#task-framework)中跟踪已注册的 OM 和 SCM DB 任务的状态和最后运行时间戳
+     * ContainerHistory 表
+         * 存储容器副本 -> 具有最新已知时间戳记的数据节点映射。用于确定报告容器丢失时的最后一个已知数据节点
+     * UnhealthyContainers 表
+         * 随时跟踪集群中所有不健康容器(MISSING,UNDER_REPLICATED,OVER_REPLICATED,MIS_REPLICATED)
+
+
+## 需要关注的配置项
+
+配置项 |默认值 | <div style="width:300px;">描述</div>
+----|---------|------------
+ozone.recon.http-address | 0.0.0.0:9888 | Recon web UI 监听的地址和基本端口。
+ozone.recon.address | 0.0.0.0:9891 | Recon 的 RPC 地址。
+ozone.recon.db.dir | none | Recon Server 存储其元数据的目录。
+ozone.recon.om.db.dir | none | Recon Server 存储其 OM 快照 DB 的目录。
+ozone.recon.om.snapshot<br>.task.interval.delay | 10m | Recon 以分钟间隔请求 OM DB 快照。
+ozone.recon.task<br>.missingcontainer.interval | 300s | 定期检查集群中不健康容器的时间间隔。
+ozone.recon.sql.db.jooq.dialect | DERBY | 请参考 [SQL 方言](https://www.jooq.org/javadoc/latest/org.jooq/org/jooq/SQLDialect.html) 指定其他方言。
+ozone.recon.sql.db.jdbc.url | jdbc:derby:${ozone.recon.db.dir}<br>/ozone_recon_derby.db | Recon SQL database 的 jdbc url。
+ozone.recon.sql.db.username | none | Recon SQL database 的 username。
+ozone.recon.sql.db.password | none | Recon SQL database 的 password。
+ozone.recon.sql.db.driver | org.apache.derby.jdbc<br>.EmbeddedDriver | Recon SQL database 的 jdbc driver。

Review comment:
       Solved it

##########
File path: hadoop-hdds/docs/content/concept/Recon.zh.md
##########
@@ -0,0 +1,117 @@
+---
+title: "Recon"
+date: "2020-10-27"
+weight: 8
+menu: 
+  main:
+     parent: 概念
+summary: Recon 作为 Ozone 的管理和监视控制台。
+---
+<!---
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+Recon 充当 Ozone 的管理和监视控制台。它提供了 Ozone 的鸟瞰图,并通过基于 REST 的 API 和丰富的网页用户界面(Web UI)展示了集群的当前状态,从而帮助用户解决了任何问题。
+
+
+## 高层次设计
+
+{{<figure src="/concept/ReconHighLevelDesign.png" width="800px">}}
+
+<br/>
+
+在较高的层次上,Recon 从 Ozone Manager(OM)收集和汇总元数据,Storage Container Manager(SCM)和 Datanodes(DN)充当中央管理和监视控制台。Ozone 管理员可以使用 Recon 查询系统的当前状态,而不会使 OM  或 SCM 过载。
+
+Recon维护多个数据库,以支持批处理,更快的查询和持久化聚合信息。它维护 OM DB 和 SCM DB 的本地副本,以及用于持久存储聚合信息的 SQL 数据库。
+
+Recon 还与 Prometheus 集成,提供一个 HTTP 端点来查询 Prometheus 的 Ozone 指标,并在网页用户界面(Web UI)中显示一些关键的时间点指标。
+
+## Recon 和 Ozone Manager
+
+{{<figure src="/concept/ReconOmDesign.png" width="800px">}}
+
+<br/>
+
+Recon 最初从领导者 OM 的 HTTP 端点获取 OM rocks DB 的完整快照,解压缩文件并初始化 RocksDB 以进行本地查询。通过对最后一个应用的序列 ID ,RPC calls 定期请求领导者 OM 进行增量更新,从而使数据库保持同步。如果由于某种原因而无法检索增量更新或将其应用于本地数据库,则再次请求完整快照以使本地数据库与 OM DB 保持同步。因此,Recon 可以显示陈旧的信息,因为本地数据库不会总是同步。从 OM 检索到的数据库更新,然后转换为一批事件,以便 OM DB 任务通过 [Recon 任务框架](#task-framework) 进行进一步处理。
+
+## Recon 和 Storage Container Manager
+
+{{<figure src="/concept/ReconScmDesign.png" width="800px">}}
+
+<br/>
+
+Recon 还充当数据节点的被动 SCM。在集群中配置 Recon 时,所有数据节点都向 Recon 注册,并像 SCM 一样向 Recon 发送心跳、容器报告、增量容器报告等。Recon 使用它从数据节点得到的所有信息在本地构建自己的 SCM rocks DB 副本。Recon 从不向数据节点发送任何命令作为响应,而只是充当被动 SCM 以更快地查找 SCM 元数据。
+
+## <a name="task-framework"></a> 任务框架
+
+Recon 有其自己的任务框架,可对从 OM 和 SCM 获得的数据进行批处理。一个任务可以在 OM DB 或 SCM DB 上监听和操作数据库事件,如`PUT`、`DELETE`、`UPDATE`等。在此基础上,任务实现`org.apache.hadoop.ozone.recon.tasks.ReconOmTask`或者扩展`org.apache.hadoop.ozone.recon.scm.ReconScmTask`。
+
+`ReconOmTask`的示例是`ContainerKeyMapperTask`,它在 RocksDB 中保留了容器 -> 键映射。当报告容器丢失或处于不健康运行状况的状态时,这有助于了解哪些键是容器的一部分。另一个示例是`FileSizeCountTask`,它跟踪 SQL 数据库中给定文件大小范围内的文件计数。这些任务具有两种情况的实现:
+ 
+ - 完整快照(reprocess())
+ - 增量更新(process())
+ 
+当从领导者 OM 获得 OM DB 的完整快照时,将对所有注册的 OM 任务调用 reprocess()。在随后的增量更新中,将在这些 OM 任务上调用 process()。
+
+`ReconScmTask`的示例是`ContainerHealthTask`,它以可配置的时间间隔运行,扫描所有容器的列表,并将不健康容器的状态(`MISSING`,`MIS_REPLICATED`,`UNDER_REPLICATED`,`OVER_REPLICATED`)保留在 SQL 表中。此信息用于确定集群中是否有丢失的容器。
+
+## Recon 和 Prometheus
+
+Recon 可以与配置为收集指标的任何 Prometheus 实例集成,并且可以在数据节点和 Pipelines 页面的 Recon UI 中显示有用的信息。Recon 还公开了一个代理端点 ([/metrics]({{< ref path="interface/ReconApi.zh.md#metrics" >}})) 来查询 Prometheus。可以通过将此配置`ozone.recon.prometheus.http.endpoint`设置为 Prometheus 端点如`ozone.recon.prometheus.http.endpoint=localhost:9090`来启用此集成。
+
+## API 参考
+
+[链接到完整的 API 参考]({{< ref path="interface/ReconApi.zh.md" >}})
+   
+## 持续状态
+
+ * [OM database]({{< ref "concept/OzoneManager.zh.md#persisted-state" >}})的本地副本
+ * [SCM database]({{< ref "concept/StorageContainerManager.zh.md#persisted-state" >}})的本地副本
+ * 以下数据将保留在指定 RocksDB 目录中的 Recon 中: 
+     * ContainerKey 表
+         * 存储映射(容器,键) -> 计数
+     * ContainerKeyCount 表
+         * 存储容器 ID  -> 容器内的键数
+ * 以下数据存储在已配置的 SQL 数据库中(默认为 Derby ):
+     * GlobalStats 表
+         * 一个键 -> Value table 用于存储集群中出现的卷/桶/键的总数等聚合信息
+     * FileCountBySize 表
+         * 跟踪集群中文件大小范围内的文件数量
+     * ReconTaskStatus 表
+         * 在[Recon 任务框架](#task-framework)中跟踪已注册的 OM 和 SCM DB 任务的状态和最后运行时间戳
+     * ContainerHistory 表
+         * 存储容器副本 -> 具有最新已知时间戳记的数据节点映射。用于确定报告容器丢失时的最后一个已知数据节点
+     * UnhealthyContainers 表
+         * 随时跟踪集群中所有不健康容器(MISSING,UNDER_REPLICATED,OVER_REPLICATED,MIS_REPLICATED)
+
+
+## 需要关注的配置项
+
+配置项 |默认值 | <div style="width:300px;">描述</div>
+----|---------|------------
+ozone.recon.http-address | 0.0.0.0:9888 | Recon web UI 监听的地址和基本端口。
+ozone.recon.address | 0.0.0.0:9891 | Recon 的 RPC 地址。
+ozone.recon.db.dir | none | Recon Server 存储其元数据的目录。
+ozone.recon.om.db.dir | none | Recon Server 存储其 OM 快照 DB 的目录。
+ozone.recon.om.snapshot<br>.task.interval.delay | 10m | Recon 以分钟间隔请求 OM DB 快照。
+ozone.recon.task<br>.missingcontainer.interval | 300s | 定期检查集群中不健康容器的时间间隔。
+ozone.recon.sql.db.jooq.dialect | DERBY | 请参考 [SQL 方言](https://www.jooq.org/javadoc/latest/org.jooq/org/jooq/SQLDialect.html) 指定其他方言。
+ozone.recon.sql.db.jdbc.url | jdbc:derby:${ozone.recon.db.dir}<br>/ozone_recon_derby.db | Recon SQL database 的 jdbc url。
+ozone.recon.sql.db.username | none | Recon SQL database 的 username。
+ozone.recon.sql.db.password | none | Recon SQL database 的 password。

Review comment:
       Solved it

##########
File path: hadoop-hdds/docs/content/concept/Recon.zh.md
##########
@@ -0,0 +1,117 @@
+---
+title: "Recon"
+date: "2020-10-27"
+weight: 8
+menu: 
+  main:
+     parent: 概念
+summary: Recon 作为 Ozone 的管理和监视控制台。
+---
+<!---
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+Recon 充当 Ozone 的管理和监视控制台。它提供了 Ozone 的鸟瞰图,并通过基于 REST 的 API 和丰富的网页用户界面(Web UI)展示了集群的当前状态,从而帮助用户解决了任何问题。
+
+
+## 高层次设计
+
+{{<figure src="/concept/ReconHighLevelDesign.png" width="800px">}}
+
+<br/>
+
+在较高的层次上,Recon 从 Ozone Manager(OM)收集和汇总元数据,Storage Container Manager(SCM)和 Datanodes(DN)充当中央管理和监视控制台。Ozone 管理员可以使用 Recon 查询系统的当前状态,而不会使 OM  或 SCM 过载。
+
+Recon维护多个数据库,以支持批处理,更快的查询和持久化聚合信息。它维护 OM DB 和 SCM DB 的本地副本,以及用于持久存储聚合信息的 SQL 数据库。
+
+Recon 还与 Prometheus 集成,提供一个 HTTP 端点来查询 Prometheus 的 Ozone 指标,并在网页用户界面(Web UI)中显示一些关键的时间点指标。
+
+## Recon 和 Ozone Manager
+
+{{<figure src="/concept/ReconOmDesign.png" width="800px">}}
+
+<br/>
+
+Recon 最初从领导者 OM 的 HTTP 端点获取 OM rocks DB 的完整快照,解压缩文件并初始化 RocksDB 以进行本地查询。通过对最后一个应用的序列 ID ,RPC calls 定期请求领导者 OM 进行增量更新,从而使数据库保持同步。如果由于某种原因而无法检索增量更新或将其应用于本地数据库,则再次请求完整快照以使本地数据库与 OM DB 保持同步。因此,Recon 可以显示陈旧的信息,因为本地数据库不会总是同步。从 OM 检索到的数据库更新,然后转换为一批事件,以便 OM DB 任务通过 [Recon 任务框架](#task-framework) 进行进一步处理。

Review comment:
       Solved it

##########
File path: hadoop-hdds/docs/content/concept/Recon.zh.md
##########
@@ -0,0 +1,117 @@
+---
+title: "Recon"
+date: "2020-10-27"
+weight: 8
+menu: 
+  main:
+     parent: 概念
+summary: Recon 作为 Ozone 的管理和监视控制台。
+---
+<!---
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+Recon 充当 Ozone 的管理和监视控制台。它提供了 Ozone 的鸟瞰图,并通过基于 REST 的 API 和丰富的网页用户界面(Web UI)展示了集群的当前状态,从而帮助用户解决了任何问题。
+
+
+## 高层次设计
+
+{{<figure src="/concept/ReconHighLevelDesign.png" width="800px">}}
+
+<br/>
+
+在较高的层次上,Recon 从 Ozone Manager(OM)收集和汇总元数据,Storage Container Manager(SCM)和 Datanodes(DN)充当中央管理和监视控制台。Ozone 管理员可以使用 Recon 查询系统的当前状态,而不会使 OM  或 SCM 过载。
+
+Recon维护多个数据库,以支持批处理,更快的查询和持久化聚合信息。它维护 OM DB 和 SCM DB 的本地副本,以及用于持久存储聚合信息的 SQL 数据库。
+
+Recon 还与 Prometheus 集成,提供一个 HTTP 端点来查询 Prometheus 的 Ozone 指标,并在网页用户界面(Web UI)中显示一些关键的时间点指标。
+
+## Recon 和 Ozone Manager
+
+{{<figure src="/concept/ReconOmDesign.png" width="800px">}}
+
+<br/>
+
+Recon 最初从领导者 OM 的 HTTP 端点获取 OM rocks DB 的完整快照,解压缩文件并初始化 RocksDB 以进行本地查询。通过对最后一个应用的序列 ID ,RPC calls 定期请求领导者 OM 进行增量更新,从而使数据库保持同步。如果由于某种原因而无法检索增量更新或将其应用于本地数据库,则再次请求完整快照以使本地数据库与 OM DB 保持同步。因此,Recon 可以显示陈旧的信息,因为本地数据库不会总是同步。从 OM 检索到的数据库更新,然后转换为一批事件,以便 OM DB 任务通过 [Recon 任务框架](#task-framework) 进行进一步处理。
+
+## Recon 和 Storage Container Manager
+
+{{<figure src="/concept/ReconScmDesign.png" width="800px">}}
+
+<br/>
+
+Recon 还充当数据节点的被动 SCM。在集群中配置 Recon 时,所有数据节点都向 Recon 注册,并像 SCM 一样向 Recon 发送心跳、容器报告、增量容器报告等。Recon 使用它从数据节点得到的所有信息在本地构建自己的 SCM rocks DB 副本。Recon 从不向数据节点发送任何命令作为响应,而只是充当被动 SCM 以更快地查找 SCM 元数据。
+
+## <a name="task-framework"></a> 任务框架
+
+Recon 有其自己的任务框架,可对从 OM 和 SCM 获得的数据进行批处理。一个任务可以在 OM DB 或 SCM DB 上监听和操作数据库事件,如`PUT`、`DELETE`、`UPDATE`等。在此基础上,任务实现`org.apache.hadoop.ozone.recon.tasks.ReconOmTask`或者扩展`org.apache.hadoop.ozone.recon.scm.ReconScmTask`。
+
+`ReconOmTask`的示例是`ContainerKeyMapperTask`,它在 RocksDB 中保留了容器 -> 键映射。当报告容器丢失或处于不健康运行状况的状态时,这有助于了解哪些键是容器的一部分。另一个示例是`FileSizeCountTask`,它跟踪 SQL 数据库中给定文件大小范围内的文件计数。这些任务具有两种情况的实现:
+ 
+ - 完整快照(reprocess())
+ - 增量更新(process())
+ 
+当从领导者 OM 获得 OM DB 的完整快照时,将对所有注册的 OM 任务调用 reprocess()。在随后的增量更新中,将在这些 OM 任务上调用 process()。
+
+`ReconScmTask`的示例是`ContainerHealthTask`,它以可配置的时间间隔运行,扫描所有容器的列表,并将不健康容器的状态(`MISSING`,`MIS_REPLICATED`,`UNDER_REPLICATED`,`OVER_REPLICATED`)保留在 SQL 表中。此信息用于确定集群中是否有丢失的容器。

Review comment:
       Solved it

##########
File path: hadoop-hdds/docs/content/concept/Recon.zh.md
##########
@@ -0,0 +1,117 @@
+---
+title: "Recon"
+date: "2020-10-27"
+weight: 8
+menu: 
+  main:
+     parent: 概念
+summary: Recon 作为 Ozone 的管理和监视控制台。
+---
+<!---
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+Recon 充当 Ozone 的管理和监视控制台。它提供了 Ozone 的鸟瞰图,并通过基于 REST 的 API 和丰富的网页用户界面(Web UI)展示了集群的当前状态,从而帮助用户解决了任何问题。
+
+
+## 高层次设计
+
+{{<figure src="/concept/ReconHighLevelDesign.png" width="800px">}}
+
+<br/>
+
+在较高的层次上,Recon 从 Ozone Manager(OM)收集和汇总元数据,Storage Container Manager(SCM)和 Datanodes(DN)充当中央管理和监视控制台。Ozone 管理员可以使用 Recon 查询系统的当前状态,而不会使 OM  或 SCM 过载。
+
+Recon维护多个数据库,以支持批处理,更快的查询和持久化聚合信息。它维护 OM DB 和 SCM DB 的本地副本,以及用于持久存储聚合信息的 SQL 数据库。
+
+Recon 还与 Prometheus 集成,提供一个 HTTP 端点来查询 Prometheus 的 Ozone 指标,并在网页用户界面(Web UI)中显示一些关键的时间点指标。
+
+## Recon 和 Ozone Manager
+
+{{<figure src="/concept/ReconOmDesign.png" width="800px">}}
+
+<br/>
+
+Recon 最初从领导者 OM 的 HTTP 端点获取 OM rocks DB 的完整快照,解压缩文件并初始化 RocksDB 以进行本地查询。通过对最后一个应用的序列 ID ,RPC calls 定期请求领导者 OM 进行增量更新,从而使数据库保持同步。如果由于某种原因而无法检索增量更新或将其应用于本地数据库,则再次请求完整快照以使本地数据库与 OM DB 保持同步。因此,Recon 可以显示陈旧的信息,因为本地数据库不会总是同步。从 OM 检索到的数据库更新,然后转换为一批事件,以便 OM DB 任务通过 [Recon 任务框架](#task-framework) 进行进一步处理。
+
+## Recon 和 Storage Container Manager
+
+{{<figure src="/concept/ReconScmDesign.png" width="800px">}}
+
+<br/>
+
+Recon 还充当数据节点的被动 SCM。在集群中配置 Recon 时,所有数据节点都向 Recon 注册,并像 SCM 一样向 Recon 发送心跳、容器报告、增量容器报告等。Recon 使用它从数据节点得到的所有信息在本地构建自己的 SCM rocks DB 副本。Recon 从不向数据节点发送任何命令作为响应,而只是充当被动 SCM 以更快地查找 SCM 元数据。
+
+## <a name="task-framework"></a> 任务框架
+
+Recon 有其自己的任务框架,可对从 OM 和 SCM 获得的数据进行批处理。一个任务可以在 OM DB 或 SCM DB 上监听和操作数据库事件,如`PUT`、`DELETE`、`UPDATE`等。在此基础上,任务实现`org.apache.hadoop.ozone.recon.tasks.ReconOmTask`或者扩展`org.apache.hadoop.ozone.recon.scm.ReconScmTask`。
+
+`ReconOmTask`的示例是`ContainerKeyMapperTask`,它在 RocksDB 中保留了容器 -> 键映射。当报告容器丢失或处于不健康运行状况的状态时,这有助于了解哪些键是容器的一部分。另一个示例是`FileSizeCountTask`,它跟踪 SQL 数据库中给定文件大小范围内的文件计数。这些任务具有两种情况的实现:
+ 
+ - 完整快照(reprocess())
+ - 增量更新(process())
+ 
+当从领导者 OM 获得 OM DB 的完整快照时,将对所有注册的 OM 任务调用 reprocess()。在随后的增量更新中,将在这些 OM 任务上调用 process()。
+
+`ReconScmTask`的示例是`ContainerHealthTask`,它以可配置的时间间隔运行,扫描所有容器的列表,并将不健康容器的状态(`MISSING`,`MIS_REPLICATED`,`UNDER_REPLICATED`,`OVER_REPLICATED`)保留在 SQL 表中。此信息用于确定集群中是否有丢失的容器。
+
+## Recon 和 Prometheus
+
+Recon 可以与配置为收集指标的任何 Prometheus 实例集成,并且可以在数据节点和 Pipelines 页面的 Recon UI 中显示有用的信息。Recon 还公开了一个代理端点 ([/metrics]({{< ref path="interface/ReconApi.zh.md#metrics" >}})) 来查询 Prometheus。可以通过将此配置`ozone.recon.prometheus.http.endpoint`设置为 Prometheus 端点如`ozone.recon.prometheus.http.endpoint=localhost:9090`来启用此集成。
+
+## API 参考
+
+[链接到完整的 API 参考]({{< ref path="interface/ReconApi.zh.md" >}})
+   
+## 持续状态
+
+ * [OM database]({{< ref "concept/OzoneManager.zh.md#persisted-state" >}})的本地副本
+ * [SCM database]({{< ref "concept/StorageContainerManager.zh.md#persisted-state" >}})的本地副本
+ * 以下数据将保留在指定 RocksDB 目录中的 Recon 中: 
+     * ContainerKey 表
+         * 存储映射(容器,键) -> 计数
+     * ContainerKeyCount 表
+         * 存储容器 ID  -> 容器内的键数
+ * 以下数据存储在已配置的 SQL 数据库中(默认为 Derby ):
+     * GlobalStats 表
+         * 一个键 -> Value table 用于存储集群中出现的卷/桶/键的总数等聚合信息
+     * FileCountBySize 表
+         * 跟踪集群中文件大小范围内的文件数量
+     * ReconTaskStatus 表
+         * 在[Recon 任务框架](#task-framework)中跟踪已注册的 OM 和 SCM DB 任务的状态和最后运行时间戳
+     * ContainerHistory 表
+         * 存储容器副本 -> 具有最新已知时间戳记的数据节点映射。用于确定报告容器丢失时的最后一个已知数据节点
+     * UnhealthyContainers 表
+         * 随时跟踪集群中所有不健康容器(MISSING,UNDER_REPLICATED,OVER_REPLICATED,MIS_REPLICATED)
+
+
+## 需要关注的配置项
+
+配置项 |默认值 | <div style="width:300px;">描述</div>
+----|---------|------------
+ozone.recon.http-address | 0.0.0.0:9888 | Recon web UI 监听的地址和基本端口。
+ozone.recon.address | 0.0.0.0:9891 | Recon 的 RPC 地址。
+ozone.recon.db.dir | none | Recon Server 存储其元数据的目录。
+ozone.recon.om.db.dir | none | Recon Server 存储其 OM 快照 DB 的目录。
+ozone.recon.om.snapshot<br>.task.interval.delay | 10m | Recon 以分钟间隔请求 OM DB 快照。
+ozone.recon.task<br>.missingcontainer.interval | 300s | 定期检查集群中不健康容器的时间间隔。
+ozone.recon.sql.db.jooq.dialect | DERBY | 请参考 [SQL 方言](https://www.jooq.org/javadoc/latest/org.jooq/org/jooq/SQLDialect.html) 指定其他方言。

Review comment:
       Solved it




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
users@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@ozone.apache.org
For additional commands, e-mail: issues-help@ozone.apache.org