架构

Recon

师成师成· 更新于 2026-09-28· 阅读 12 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

Recon 是 Ozone 的管理与监控控制台。它提供 Ozone 的全局视图,并通过基于 REST 的 API 和丰富的 Web 界面展示集群的当前状态,帮助用户排查各种问题。

高层设计

Recon High Level Design

总体而言,Recon 从 Ozone Manager(OM)、Storage Container Manager(SCM)和 Datanode(DN)收集并聚合元数据,充当集中式的管理与监控控制台。Ozone 管理员可以使用 Recon 查询系统当前状态,而不会给 OM 或 SCM 带来过大的负载。

Recon 维护多个数据库,以支持批处理、更快的查询以及聚合信息的持久化。它保存 OM 数据库和 SCM 数据库的本地副本,并使用一个 SQL 数据库来持久化聚合信息。

Recon 还集成了 Prometheus,提供一个 HTTP 端点用于查询 Ozone 指标的 Prometheus 数据,同时在 Web 界面中展示若干关键的瞬时指标。

Recon 与 Ozone Manager

Recon OM Design

Recon 最初从主 OM 的 HTTP 端点获取 OM RocksDB 的完整快照,解压该文件并初始化 RocksDB 以便在本地进行查询。此后,它会定期通过 RPC 调用从上一次已应用的序列号开始向主 OM 请求增量更新,以保持数据库同步。如果出于某种原因无法获取增量更新,或无法将其应用到本地数据库,则会再次请求完整快照,以使本地数据库与 OM 数据库保持同步。因此,Recon 可能会显示过时的信息,因为本地数据库并不总是同步的。

从 OM 获取的数据库更新随后会被转换为一批事件,交由 OM 数据库任务通过 Recon 任务框架 进一步处理。

Recon 与 Storage Container Manager

Recon SCM Design

Recon 对 Datanode 而言还充当一个被动的 SCM。当集群中配置了 Recon 后,所有 Datanode 都会向 Recon 注册并像向 SCM 发送心跳、容器报告、增量容器报告等信息一样向 Recon 发送这些信息。Recon 利用从 Datanode 获取的全部信息,在本地构建自己的一份 SCM RocksDB 副本。Recon 不会因此向 Datanode 发送任何指令,它只是作为被动的 SCM,以便更快地查询 SCM 元数据。

任务框架

Recon 拥有自己的任务框架,用于对从 OM 和 SCM 获取的数据进行批处理。一个任务可以监听并响应 OM 数据库或 SCM 数据库上的 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 数据库的全量快照时,会在所有已注册的 OM 任务上调用 reprocess()。在后续的增量更新中,则会在这些 OM 任务上调用 process()。

ReconScmTask 的一个示例是 ContainerHealthTask,它按照可配置的时间间隔运行,扫描所有容器的列表,并将不健康容器的状态(MISSING、MIS_REPLICATED、UNDER_REPLICATED、OVER_REPLICATED)持久化到 SQL 表中。此信息用于确定集群中是否存在缺失的容器。

Recon 与 Prometheus

Recon 可以与任何配置用于收集指标的 Prometheus 实例集成,并可在 Recon UI 的 Datanodes 和 Pipelines 页面中显示有用的信息。Recon 还提供了一个代理端点(/metrics)用于查询 Prometheus。可以通过将配置 ozone.recon.prometheus.http.endpoint 设置为 Prometheus 的端点(例如 ozone.recon.prometheus.http.endpoint=http://prometheus:9090)来启用此集成。

API 参考

完整 API 参考的链接

持久化状态

以下数据持久化在指定的 RocksDB 目录中的 Recon 里:

  • ContainerKey 表

    • 存储(容器,键)到数量的映射关系
  • ContainerKeyCount 表

    • 存储容器 ID 到容器内键数量的映射关系

以下数据存储在配置的 SQL 数据库中(默认为 Derby):

  • GlobalStats 表

    • 一个键到值的表,用于存储聚合信息,如集群中卷、桶、键的总数
  • FileCountBySize 表

    • 跟踪集群中指定文件大小范围内的文件数量
  • ReconTaskStatus 表

    • 跟踪 Recon 任务框架中已注册的 OM 和 SCM 数据库任务的状态及上次运行时间戳
  • ContainerHistory 表

  • 存储 ContainerReplica 到 Datanode 的映射关系及其最后已知时间戳。当容器被报告为丢失时,用于确定其最后已知的 Datanode。

  • UnhealthyContainers 表

    • 实时跟踪集群中所有不健康容器(MISSING、UNDER_REPLICATED、OVER_REPLICATED、MIS_REPLICATED)。

常用配置

配置项默认值说明

ozone.recon.http-address0.0.0.0:9888Recon Web UI 将监听的地址和基础端口。

ozone.recon.address0.0.0.0:9891Recon 的 RPC 地址。

ozone.recon.heatmap.providernoneRecon 的 HeatMapProvider(热力图提供程序)。

ozone.recon.db.dirnoneRecon Server 存储其元数据的目录。

ozone.recon.om.db.dirnoneRecon Server 存储其 OM 快照数据库的目录。

ozone.recon.om.snapshot.task.interval.delay10mRecon 请求 OM 数据库快照/增量更新的间隔时间(以分钟为单位)。

ozone.recon.task.missingcontainer.interval300s集群中不健康容器的周期性检查时间间隔。

ozone.recon.task.safemode.wait.threshold300sRecon 退出安全模式或预热模式前的最长等待时间。

ozone.recon.sql.db.jooq.dialectDERBY请参阅 SQL Dialect 以指定不同的方言。

ozone.recon.sql.db.jdbc.url``jdbc:derby:${ozone.recon.db.dir}
/ozone_recon_derby.dbRecon SQL 数据库的 jdbc url。

ozone.recon.sql.db.usernamenoneRecon SQL 数据库的用户名。

ozone.recon.sql.db.passwordnoneRecon SQL 数据库的密码。

ozone.recon.sql.db.driver``org.apache.derby.jdbc.EmbeddedDriverRecon SQL 数据库的 jdbc 驱动。

ozone.recon.prometheus.http.endpointnoneRecon 用于与 Prometheus 集成的 Prometheus HTTP 端点 URL。启用后可在 Recon UI 中展示指标,并暴露一个用于查询 Prometheus 的代理端点。例如:http://prometheus:9090。

ozone.recon.scmconfignoneSCM 配置的前缀。

ozone.recon.db.dirs.permissions``750Recon 元数据目录的权限。权限可以使用八进制或符号形式表示。如果未设置默认权限,则使用默认值 750。

ozone.recon.datanode.addressnoneRecon 的 Datanode 地址。

ozone.recon.heatmap.enable``false启用/禁用 Recon 热力图功能。除了该配置项外,用户还必须提供 org.apache.hadoop.ozone.recon.heatmap.IHeatMapProvider 接口的实现,并在 ozone.recon.heatmap.provider 配置中进行配置。

ozone.recon.https-address``0.0.0.0:9889Recon Web UI 使用 HTTPS 监听的地址和基础端口。如果端口为 0,服务器将使用空闲端口启动。

ozone.recon.datanode.bind.host``0.0.0.0Datanode 地址的绑定主机。

评论

登录后参与评论

正在加载评论…