| |
| |
| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="utf-8"> |
| <meta http-equiv="X-UA-Compatible" content="IE=edge"> |
| <meta name="viewport" content="width=device-width, initial-scale=1"> |
| |
| <meta name="description" content="Apache Ozone Documentation"> |
| |
| <title>Documentation for Apache Ozone</title> |
| |
| |
| <link href="../../css/bootstrap.min.css" rel="stylesheet"> |
| |
| |
| <link href="../../css/ozonedoc.css" rel="stylesheet"> |
| |
| </head> |
| |
| |
| <body> |
| |
| |
| <nav class="navbar navbar-inverse navbar-fixed-top"> |
| <div class="container-fluid"> |
| <div class="navbar-header"> |
| <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#sidebar" aria-expanded="false" aria-controls="navbar"> |
| <span class="sr-only">Toggle navigation</span> |
| <span class="icon-bar"></span> |
| <span class="icon-bar"></span> |
| <span class="icon-bar"></span> |
| </button> |
| <a href="../../zh/index.html" class="navbar-left ozone-logo"> |
| <img src="../../ozone-logo-small.png"/> |
| </a> |
| <a class="navbar-brand hidden-xs" href="../../zh/index.html"> |
| Apache Ozone/HDDS documentation |
| </a> |
| <a class="navbar-brand visible-xs-inline" href="#">Apache Ozone</a> |
| </div> |
| <div id="navbar" class="navbar-collapse collapse"> |
| <ul class="nav navbar-nav navbar-right"> |
| <li><a href="https://github.com/apache/hadoop-ozone">Source</a></li> |
| <li><a href="https://hadoop.apache.org">Apache Hadoop</a></li> |
| <li><a href="https://apache.org">ASF</a></li> |
| </ul> |
| </div> |
| </div> |
| </nav> |
| |
| |
| <div class="wrapper"> |
| <div class="container-fluid"> |
| <div class="row"> |
| |
| <div class="col-sm-2 col-md-2 sidebar" id="sidebar"> |
| <ul class="nav nav-sidebar"> |
| |
| |
| |
| <li class=""> |
| |
| <a href="../../zh/index.html"> |
| |
| |
| |
| <span>概述</span> |
| </a> |
| </li> |
| |
| |
| |
| <li class=""> |
| |
| <a href="../../zh/start.html"> |
| |
| |
| |
| <span>快速入门</span> |
| </a> |
| </li> |
| |
| |
| |
| <li class=""> |
| <a href="../../zh/concept.html"> |
| |
| <span>概念</span> |
| </a> |
| <ul class="nav"> |
| |
| <li class=""> |
| |
| <a href="../../zh/concept/overview.html">概览</a> |
| |
| </li> |
| |
| <li class=""> |
| |
| <a href="../../zh/concept/ozonemanager.html">Ozone Manager</a> |
| |
| </li> |
| |
| <li class=""> |
| |
| <a href="../../zh/concept/storagecontainermanager.html">Storage Container Manager</a> |
| |
| </li> |
| |
| <li class=""> |
| |
| <a href="../../zh/concept/datanodes.html">数据节点</a> |
| |
| </li> |
| |
| <li class=""> |
| |
| <a href="../../zh/concept/containers.html">Containers</a> |
| |
| </li> |
| |
| <li class="active"> |
| |
| <a href="../../zh/concept/recon.html">Recon</a> |
| |
| </li> |
| |
| </ul> |
| </li> |
| |
| |
| |
| <li class=""> |
| <a href="../../zh/feature.html"> |
| |
| <span>特点</span> |
| </a> |
| <ul class="nav"> |
| |
| <li class=""> |
| |
| <a href="../../zh/feature/ha.html">高可用</a> |
| |
| </li> |
| |
| <li class=""> |
| |
| <a href="../../zh/security/gdpr.html">Ozone 中的 GDPR</a> |
| |
| </li> |
| |
| <li class=""> |
| |
| <a href="../../zh/feature/quota.html">Ozone中的配额</a> |
| |
| </li> |
| |
| <li class=""> |
| |
| <a href="../../zh/feature/recon.html">Recon 服务器</a> |
| |
| </li> |
| |
| </ul> |
| </li> |
| |
| |
| |
| <li class=""> |
| <a href="../../zh/security.html"> |
| |
| <span>安全</span> |
| </a> |
| <ul class="nav"> |
| |
| <li class=""> |
| |
| <a href="../../zh/security/secureozone.html">安全化 Ozone</a> |
| |
| </li> |
| |
| <li class=""> |
| |
| <a href="../../zh/security/securingtde.html">透明数据加密</a> |
| |
| </li> |
| |
| <li class=""> |
| |
| <a href="../../zh/security/securings3.html">安全化 S3</a> |
| |
| </li> |
| |
| <li class=""> |
| |
| <a href="../../zh/security/securitywithranger.html">Apache Ranger</a> |
| |
| </li> |
| |
| <li class=""> |
| |
| <a href="../../zh/security/securityacls.html">Ozone 访问控制列表</a> |
| |
| </li> |
| |
| </ul> |
| </li> |
| |
| |
| |
| <li class=""> |
| <a href="../../zh/interface.html"> |
| |
| <span>编程接口</span> |
| </a> |
| <ul class="nav"> |
| |
| <li class=""> |
| |
| <a href="../../zh/interface/javaapi.html">Java API</a> |
| |
| </li> |
| |
| <li class=""> |
| |
| <a href="../../zh/interface/o3fs.html">Ozone 文件系统</a> |
| |
| </li> |
| |
| <li class=""> |
| |
| <a href="../../zh/interface/csi.html">CSI 协议</a> |
| |
| </li> |
| |
| <li class=""> |
| |
| <a href="../../zh/interface/s3.html">S3 协议接口</a> |
| |
| </li> |
| |
| <li class=""> |
| |
| <a href="../../zh/interface/reconapi.html">Recon API</a> |
| |
| </li> |
| |
| </ul> |
| </li> |
| |
| |
| |
| <li class=""> |
| |
| <a href="../../zh/tools.html"> |
| |
| |
| |
| <span>工具</span> |
| </a> |
| </li> |
| |
| |
| |
| <li class=""> |
| |
| <a href="../../zh/recipe.html"> |
| |
| |
| |
| <span>使用配方</span> |
| </a> |
| </li> |
| |
| |
| <li><a href="../../design.html"><span><b>Design docs</b></span></a></li> |
| <li class="visible-xs"><a href="#">References</a> |
| <ul class="nav"> |
| <li><a href="https://github.com/apache/hadoop"><span class="glyphicon glyphicon-new-window" aria-hidden="true"></span> Source</a></li> |
| <li><a href="https://hadoop.apache.org"><span class="glyphicon glyphicon-new-window" aria-hidden="true"></span> Apache Hadoop</a></li> |
| <li><a href="https://apache.org"><span class="glyphicon glyphicon-new-window" aria-hidden="true"></span> ASF</a></li> |
| </ul></li> |
| </ul> |
| |
| </div> |
| |
| <div class="col-sm-10 col-sm-offset-2 col-md-10 col-md-offset-2 main"> |
| |
| |
| |
| <div class="col-md-9"> |
| <nav aria-label="breadcrumb"> |
| <ol class="breadcrumb"> |
| <li class="breadcrumb-item"><a href="../../zh/index.html">Home</a></li> |
| <li class="breadcrumb-item" aria-current="page"><a href="../../zh/concept.html">概念</a></li> |
| <li class="breadcrumb-item active" aria-current="page">Recon</li> |
| </ol> |
| </nav> |
| |
| |
| |
| <div class="pull-right"> |
| |
| |
| |
| <a href="../../concept/recon.html"><span class="label label-success">English</span></a> |
| |
| |
| |
| |
| </div> |
| |
| |
| <div class="col-md-9"> |
| <h1>Recon</h1> |
| |
| <!--- |
| 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. |
| --> |
| <p>Recon 充当 Ozone 的管理和监视控制台。它提供了 Ozone 的鸟瞰图,并通过基于 REST 的 API 和丰富的网页用户界面(Web UI)展示了集群的当前状态,从而帮助用户解决任何问题。</p> |
| <h2 id="高层次设计">高层次设计</h2> |
| <figure> |
| <img src="../../concept/ReconHighLevelDesign.png" width="800px"/> |
| </figure> |
| |
| <br/> |
| <p>在较高的层次上,Recon 收集和汇总来自 Ozone Manager(OM)、Storage Container Manager(SCM)和数据节点(DN)的元数据,并充当中央管理和监视控制台。Ozone 管理员可以使用 Recon 查询系统的当前状态,而不会使 OM 或 SCM 过载。</p> |
| <p>Recon 维护多个数据库,以支持批处理,更快的查询和持久化聚合信息。它维护 OM DB 和 SCM DB 的本地副本,以及用于持久存储聚合信息的 SQL 数据库。</p> |
| <p>Recon 还与 Prometheus 集成,提供一个 HTTP 端点来查询 Prometheus 的 Ozone 指标,并在网页用户界面(Web UI)中显示一些关键时间点的指标。</p> |
| <h2 id="recon-和-ozone-manager">Recon 和 Ozone Manager</h2> |
| <figure> |
| <img src="../../concept/ReconOmDesign.png" width="800px"/> |
| </figure> |
| |
| <br/> |
| <p>Recon 最初从领导者 OM 的 HTTP 端点获取 OM rocks DB 的完整快照,解压缩文件并初始化 RocksDB 以进行本地查询。通过对最后一个应用的序列 ID 的 RPC 调用,定期请求领导者 OM 进行增量更新,从而使数据库保持同步。如果由于某种原因而无法检索增量更新或将其应用于本地数据库,则会再次请求一个完整快照以使本地数据库与 OM DB 保持同步。因此,Recon 可能会显示陈旧的信息,因为本地数据库不会总是同步的。</p> |
| <h2 id="recon-和-storage-container-manager">Recon 和 Storage Container Manager</h2> |
| <figure> |
| <img src="../../concept/ReconScmDesign.png" width="800px"/> |
| </figure> |
| |
| <br/> |
| <p>Recon 还充当数据节点的被动 SCM。在集群中配置 Recon 时,所有数据节点都向 Recon 注册,并像 SCM 一样向 Recon 发送心跳、容器报告、增量容器报告等。Recon 使用它从数据节点得到的所有信息在本地构建自己的 SCM rocks DB 副本。Recon 从不向数据节点发送任何命令作为响应,而只是充当被动 SCM 以更快地查找 SCM 元数据。</p> |
| <h2 id="a-nametask-frameworka-任务框架"><a name="task-framework"></a> 任务框架</h2> |
| <p>Recon 有其自己的任务框架,可对从 OM 和 SCM 获得的数据进行批处理。一个任务可以在 OM DB 或 SCM DB 上监听和操作数据库事件,如<code>PUT</code>、<code>DELETE</code>、<code>UPDATE</code>等。在此基础上,任务实现<code>org.apache.hadoop.ozone.recon.tasks.ReconOmTask</code>或者扩展<code>org.apache.hadoop.ozone.recon.scm.ReconScmTask</code>。</p> |
| <p><code>ReconOmTask</code>的一个示例是<code>ContainerKeyMapperTask</code>,它在 RocksDB 中持久化保留了容器 -> 键映射。当容器被报告丢失或处于不健康的运行状态时,这有助于了解哪些键是容器的一部分。另一个示例是<code>FileSizeCountTask</code>,它跟踪 SQL 数据库中给定文件大小范围内的文件计数。这些任务有两种情况的实现:</p> |
| <ul> |
| <li>完整快照(reprocess())</li> |
| <li>增量更新(process())</li> |
| </ul> |
| <p>当从领导者 OM 获得 OM DB 的完整快照时,将对所有注册的 OM 任务调用 reprocess()。在随后的增量更新中,将在这些 OM 任务上调用 process()。</p> |
| <p><code>ReconScmTask</code>的示例是<code>ContainerHealthTask</code>,它以可配置的时间间隔运行,扫描所有容器的列表,并将不健康容器的状态(<code>MISSING</code>、<code>MIS_REPLICATED</code>、<code>UNDER_REPLICATED</code>、<code>OVER_REPLICATED</code>)持久化保留在 SQL 表中。此信息用于确定集群中是否有丢失的容器。</p> |
| <h2 id="recon-和-prometheus">Recon 和 Prometheus</h2> |
| <p>Recon 可以与任何配置为收集指标的 Prometheus 实例集成,并且可以在数据节点和 Pipelines 页面的 Recon UI 中显示有用的信息。Recon 还公开了一个代理端点 (<a href="../../zh/interface/reconapi.html#metrics">/指标</a>) 来查询 Prometheus。可以通过将此配置<code>ozone.recon.prometheus.http.endpoint</code>设置为 Prometheus 端点如<code>ozone.recon.prometheus.http.endpoint=localhost:9090</code>来启用此集成。</p> |
| <h2 id="api-参考">API 参考</h2> |
| <p><a href="../../zh/interface/reconapi.html">链接到完整的 API 参考</a></p> |
| <h2 id="持久化状态">持久化状态</h2> |
| <ul> |
| <li><a href="../../zh/concept/ozonemanager.html#持久化状态">OM database</a>的本地副本</li> |
| <li><a href="../../zh/concept/storagecontainermanager.html#持久化状态">SCM database</a>的本地副本</li> |
| <li>以下数据在 Recon 中持久化在指定的 RocksDB 目录下: |
| <ul> |
| <li>ContainerKey 表 |
| <ul> |
| <li>存储映射(容器,键) -> 计数</li> |
| </ul> |
| </li> |
| <li>ContainerKeyCount 表 |
| <ul> |
| <li>存储容器 ID -> 容器内的键数</li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| <li>以下数据存储在已配置的 SQL 数据库中(默认为 Derby ): |
| <ul> |
| <li>GlobalStats 表 |
| <ul> |
| <li>一个键 -> Value table 用于存储集群中出现的卷/桶/键的总数等聚合信息</li> |
| </ul> |
| </li> |
| <li>FileCountBySize 表 |
| <ul> |
| <li>跟踪集群中文件大小范围内的文件数量</li> |
| </ul> |
| </li> |
| <li>ReconTaskStatus 表 |
| <ul> |
| <li>跟踪在<a href="#task-framework">Recon 任务框架</a>中已注册的 OM 和 SCM DB 任务的状态和最后运行时间戳</li> |
| </ul> |
| </li> |
| <li>ContainerHistory 表 |
| <ul> |
| <li>存储容器副本 -> 具有最新已知时间戳记的数据节点映射。当一个容器被报告丢失时,它被用来确定最后已知的数据节点。</li> |
| </ul> |
| </li> |
| <li>UnhealthyContainers 表 |
| <ul> |
| <li>随时跟踪集群中所有不健康的容器(MISSING、UNDER_REPLICATED、OVER_REPLICATED、MIS_REPLICATED)</li> |
| </ul> |
| </li> |
| </ul> |
| </li> |
| </ul> |
| <h2 id="需要关注的配置项">需要关注的配置项</h2> |
| <table> |
| <thead> |
| <tr> |
| <th>配置项</th> |
| <th>默认值</th> |
| <th><div style="width:300px;">描述</div></th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td>ozone.recon.http-address</td> |
| <td>0.0.0.0:9888</td> |
| <td>Recon web UI 监听的地址和基本端口。</td> |
| </tr> |
| <tr> |
| <td>ozone.recon.address</td> |
| <td>0.0.0.0:9891</td> |
| <td>Recon 的 RPC 地址。</td> |
| </tr> |
| <tr> |
| <td>ozone.recon.db.dir</td> |
| <td>none</td> |
| <td>Recon Server 存储其元数据的目录。</td> |
| </tr> |
| <tr> |
| <td>ozone.recon.om.db.dir</td> |
| <td>none</td> |
| <td>Recon Server 存储其 OM 快照 DB 的目录。</td> |
| </tr> |
| <tr> |
| <td>ozone.recon.om.snapshot<br>.task.interval.delay</td> |
| <td>10m</td> |
| <td>Recon 以分钟间隔请求 OM DB 快照。</td> |
| </tr> |
| <tr> |
| <td>ozone.recon.task<br>.missingcontainer.interval</td> |
| <td>300s</td> |
| <td>定期检查集群中不健康容器的时间间隔。</td> |
| </tr> |
| <tr> |
| <td>ozone.recon.sql.db.jooq.dialect</td> |
| <td>DERBY</td> |
| <td>请参考 <a href="https://www.jooq.org/javadoc/latest/org.jooq/org/jooq/SQLDialect.html">SQL 方言</a> 来指定不同的方言。</td> |
| </tr> |
| <tr> |
| <td>ozone.recon.sql.db.jdbc.url</td> |
| <td>jdbc:derby:${ozone.recon.db.dir}<br>/ozone_recon_derby.db</td> |
| <td>Recon SQL database 的 jdbc url。</td> |
| </tr> |
| <tr> |
| <td>ozone.recon.sql.db.username</td> |
| <td>none</td> |
| <td>Recon SQL数据库的用户名。</td> |
| </tr> |
| <tr> |
| <td>ozone.recon.sql.db.password</td> |
| <td>none</td> |
| <td>Recon SQL数据库的密码。</td> |
| </tr> |
| <tr> |
| <td>ozone.recon.sql.db.driver</td> |
| <td>org.apache.derby.jdbc<br>.EmbeddedDriver</td> |
| <td>Recon SQL数据库的 jdbc driver。</td> |
| </tr> |
| </tbody> |
| </table> |
| |
| |
| |
| </div> |
| |
| </div> |
| </div> |
| </div> |
| </div> |
| <div class="push"></div> |
| </div> |
| |
| |
| |
| <footer class="footer"> |
| <div class="container"> |
| <span class="small text-muted"> |
| Version: 1.1.0, Last Modified: December 17, 2020 <a class="hide-child link primary-color" href="https://github.com/apache/ozone/commit/1b6f7dbed61a9e70969b6682707ce19e99c459bb">1b6f7dbed</a> |
| </span> |
| </div> |
| </footer> |
| |
| |
| |
| <script src="../../js/jquery-3.5.1.min.js"></script> |
| <script src="../../js/ozonedoc.js"></script> |
| <script src="../../js/bootstrap.min.js"></script> |
| |
| |
| </body> |
| |
| </html> |