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



##########
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:
       ```suggestion
   Recon 充当 Ozone 的管理和监视控制台。它提供了 Ozone 的鸟瞰图,并通过基于 REST 的 API 和丰富的网页用户界面(Web 
UI)展示了集群的当前状态,从而帮助用户解决任何问题。
   ```

##########
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:
       ```suggestion
       示例:/api/v1/metrics/query?query=ratis_leader_election_electionCount
   ```

##########
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:
       ```suggestion
   在较高的层次上,Recon 收集和汇总来自 Ozone Manager(OM)、Storage Container 
Manager(SCM)和数据节点(DN)的元数据,并充当中央管理和监视控制台。Ozone 管理员可以使用 Recon 查询系统的当前状态,而不会使 OM 或 
SCM 过载。
   ```

##########
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:
       ```suggestion
   Recon 作为 Ozone 的管理和监听控制台。它是一个可选组件,但强烈建议将其添加到集群中,因为 Recon 
可以在关键时刻帮助您对集群进行故障排除。请参阅 [Recon 架构]({{< ref "concept/Recon.zh.md" 
>}})以获得详细的架构概述和[Recon API]({{< ref path="interface/ReconApi.zh.md" >}}) 文档,以获得 
HTTP API 参考。
   ```

##########
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:
       ```suggestion
   Recon 维护多个数据库,以支持批处理,更快的查询和持久化聚合信息。它维护 OM DB 和 SCM DB 的本地副本,以及用于持久存储聚合信息的 
SQL 数据库。
   ```

##########
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:
       ```suggestion
   ## 持久化状态
   ```

##########
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:
       ```suggestion
   ozone.recon.sql.db.driver | org.apache.derby.jdbc<br>.EmbeddedDriver | Recon 
SQL数据库的 jdbc driver。
   ```

##########
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:
       ```suggestion
   `ReconOmTask`的一个示例是`ContainerKeyMapperTask`,它在 RocksDB 中持久化保留了容器 -> 
键映射。当容器被报告丢失或处于不健康的运行状态时,这有助于了解哪些键是容器的一部分。另一个示例是`FileSizeCountTask`,它跟踪 SQL 
数据库中给定文件大小范围内的文件计数。这些任务有两种情况的实现:
   ```

##########
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:
       ```suggestion
            * 
随时跟踪集群中所有不健康的容器(MISSING、UNDER_REPLICATED、OVER_REPLICATED、MIS_REPLICATED)
   ```

##########
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:
       ```suggestion
       不健康的容器状态可能为`MISSING`, `MIS_REPLICATED`, `UNDER_REPLICATED`, 
`OVER_REPLICATED`。
   ```

##########
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:
       ```suggestion
       响应结构与`/containers/unhealthy`相同。
   ```

##########
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:
       ```suggestion
       回传在集群中的所有管道。
   ```

##########
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:
       ```suggestion
           传递1,将回传记录1到limit。传递2,将回传limit + 1到2 * limit,依此类推。
   ```

##########
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:
       ```suggestion
           只回传ID大于给定的 prevKey 的容器。
   ```

##########
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:
       ```suggestion
           示例:prevKey=1
   ```

##########
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:
       ```suggestion
       请参阅 [Prometheus HTTP API 
参考](https://prometheus.io/docs/prometheus/latest/querying/api/) 以获取完整的查询文档。
       
        **回传**
        
   ```

##########
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:
       ```suggestion
           示例:prevKey=/vol1/bucket1/key1
   ```

##########
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:
       ```suggestion
           传递1,将回传记录1到limit。传递2,将回传limit + 1到2 * limit,依此类推。
   ```

##########
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:
       ```suggestion
   Recon 是一个自带 HTTP 网页服务器的服务,可以通过以下命令启动。
   ```

##########
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:
       ```suggestion
   Recon 还与 Prometheus 集成,提供一个 HTTP 端点来查询 Prometheus 的 Ozone 指标,并在网页用户界面(Web 
UI)中显示一些关键时间点的指标。
   ```

##########
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:
       ```suggestion
    * [OM database]({{< ref "concept/OzoneManager.zh.md#持久化状态" >}})的本地副本
    * [SCM database]({{< ref "concept/StorageContainerManager.zh.md#持久化状态" 
>}})的本地副本
   ```

##########
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:
       ```suggestion
    * 以下数据在 Recon 中持久化在指定的 RocksDB 目录下:
   ```

##########
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:
       ```suggestion
            * 跟踪在[Recon 任务框架](#task-framework)中已注册的 OM 和 SCM DB 任务的状态和最后运行时间戳
   ```

##########
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:
       ```suggestion
   ozone.recon.sql.db.username | none | Recon SQL数据库的用户名。
   ozone.recon.sql.db.password | none | Recon SQL数据库的密码。
   ```

##########
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:
       ```suggestion
   Recon 最初从领导者 OM 的 HTTP 端点获取 OM rocks DB 的完整快照,解压缩文件并初始化 RocksDB 
以进行本地查询。通过对最后一个应用的序列 ID 的 RPC 调用,定期请求领导者 OM 
进行增量更新,从而使数据库保持同步。如果由于某种原因而无法检索增量更新或将其应用于本地数据库,则会再次请求一个完整快照以使本地数据库与 OM DB 
保持同步。因此,Recon 可能会显示陈旧的信息,因为本地数据库不会总是同步的。
   
   然后,从OM检索到的数据库更新会被转换成一批事件,由 OM DB 任务通过 [Recon 任务框架](#task-framework) 进一步处理。
   ```

##########
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:
       ```suggestion
   
`ReconScmTask`的示例是`ContainerHealthTask`,它以可配置的时间间隔运行,扫描所有容器的列表,并将不健康容器的状态(`MISSING`、`MIS_REPLICATED`、`UNDER_REPLICATED`、`OVER_REPLICATED`)持久化保留在
 SQL 表中。此信息用于确定集群中是否有丢失的容器。
   ```

##########
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:
       ```suggestion
   Recon 可以与任何配置为收集指标的 Prometheus 实例集成,并且可以在数据节点和 Pipelines 页面的 Recon UI 
中显示有用的信息。Recon 还公开了一个代理端点 ([/指标]({{< ref 
path="interface/ReconApi.zh.md#metrics" >}})) 来查询 
Prometheus。可以通过将此配置`ozone.recon.prometheus.http.endpoint`设置为 Prometheus 
端点如`ozone.recon.prometheus.http.endpoint=localhost:9090`来启用此集成。
   ```

##########
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:
       ```suggestion
   ozone.recon.sql.db.jooq.dialect | DERBY | 请参考 [SQL 
方言](https://www.jooq.org/javadoc/latest/org.jooq/org/jooq/SQLDialect.html) 
来指定不同的方言。
   ```

##########
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:
       ```suggestion
            * 存储容器副本 -> 具有最新已知时间戳记的数据节点映射。当一个容器被报告丢失时,它被用来确定最后已知的数据节点。
   ```




----------------------------------------------------------------
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:
[email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to