跳到主要内容
版本:8.1.0

ETL治理的实践思路

概述

本文是一篇介绍 ETL 治理的文章,旨在帮助用户解决 ETL 遇到排队延迟时的排查和优化问题。

文章涵盖了 ETL 调度在数据处理流程中的重要性,以及如何通过监控、预警和问题定位来有效管理 ETL 调度情况,确保业务数据的时效性和准确性。

应用场景

适用于以下场景时,您可以学习该篇文章。

  • 数据出数时间异常,比如发现某天的 ETL 出数效率比往日慢;

  • ETL 排队情况严重,比如之前没有 ETL 排队,现在有了大量的排队情况;

  • 资源控制角度 等。

实践案例

说明

在大数据处理流程中,ETL 调度的稳定性和效率是保障业务数据时效性和准确性的重要环节。近期发现存在 ETL 出数时间大幅延迟及任务排队数量激增等异常现象,这可能严重影响到我们的数据分析和决策支持能力。

本文档旨在利用观远 BI 现有的智能云巡检、任务管理、运维管理、管理中心中的全局管控等功能,对 ETL 调度情况进行有效监控、预警及问题定位。

示例步骤

判断是否存在服务异常情况

思路: 一般 ETL 排队严重时,可能是多方面导致的问题,但可以优先检查 Spark 服务是否正常运行。

入口: 可以查看「管理中心 > 运维管理 > 服务管理」,查看是否有重启记录。

如果发现 Spark 服务存在重启情况,这很可能是服务异常导致的排队问题。在这种情况下,建议立即联系观远相关运维/技术支持,以排查本次 Spark 重启的原因,从而避免后续问题的再次发生,进而防止 ETL 任务调度阻塞。

判断业务是否是因为业务增长导致

  1. 查看云巡检报告: 首先,检查云巡检报告,关注 ETL 的调度数是否比之前有显著增加。

    image.png

  2. 检查调度合理性: 如果发现大量 ETL 任务调度的增加,需要先评估这些调度是否合理。

    在云巡检报告中找到「最近 31 天更新运行次数 top20 的 ETL」,检查是否存在调度次数异常高且不符合业务调度逻辑的 ETL。

    需要进行相关调整,过高的调度不仅占用 ETL 定时更新的并发,还可能占用过多的 CPU 资源,因此合理的调度对于 BI 的稳定性至关重要。

    image.png

  3. 处理正常业务增长导致的 ETL 调度增长: 如果 ETL 调度的增长是正常业务增长所致,且发现 CPU 使用率基本维持在一个高水准(例如 80% 以上),这可能表明资源不足以支持业务的增长。在这种情况下,建议联系观远运维/技术支持,评估扩容事项,以确保足够的资源支持业务增长。

    image.png

优化方向

优化高 CPU 消耗的 ETL 任务

通过云巡检报告,查看「最近 31 天 CPU 占用时长 TOP20 的 ETL」信息,检查是否有 CPU 占用时长超过 1 小时的任务。

image.png

针对消耗大量 CPU 资源的 ETL 任务,可以参考文档 ETL 优化建议 进行优化,减少不必要的资源消耗,防止长期占用资源导致 ETL 调度阻塞。

分散 ETL 调度时间

方法 1: 通过云巡检中的「最近 31 天 ETL 运行时间分布」分析,检查是否存在某个时间段 ETL 运行数量过多。建议在不影响业务的情况下,尽量分散到每个时间段执行,或者在夜间空闲时间段执行,以避免集中在同一时间段运行,造成阻塞。

image.png

方法 2:对于部分客户采用了 Spark 资源隔离(卡片和 ETL 分别部署了一个 job engine),在凌晨 ETL 调度集中导致排队的情况。

若凌晨无看数需求,建议与观远技术支持/运维沟通,配置动态切换 job engine 的部署。在夜间将卡片的 job engine 也提供给 ETL 使用,以确保 ETL 在凌晨有更多计算资源可用,提高资源利用率,减缓 ETL 排队。

如何查看是否部署了双 job:可进入「管理中心 > 运维管理 > 服务管理」处,查看「通用计算引擎服务」和「ETL 计算引擎服务」。  

清理无效 ETL 资源

通过云巡检 -ETL 中的「无任何消费情况的数据集」,查看类型为「数据流」的 ETL 数据集。检查其所属的 ETL 调度是否还有其他输出数据集,以及其他输出数据集是否有后续的使用。如果都没有,建议清理掉这个相关 ETL 调度,避免资源浪费。

image.png

限制 ETL 全局参数配置

入口:「管理中心>系统设置>通用设置>运行参数」页面。

  1. 可以对任务最大运行时长进行限制。如:

    • 设置任务最大运行时长,控制 ETL 的最大运行时长,避免异常 ETL 任务调度长时间阻塞。

    • 或自定义时间段设置运行时长,例如白天时间段运行不超过 30 分钟,其他时间段不超过 1 小时进行全局管控。

  2. 调整任务并行数,该配置主要针对定时更新和次联级更新的 ETL 任务。一般根据机器配置以及自身 ETL 任务大小进行配置。如:16C128G 的情况下,大量 ETL 任务运行时间低于 10 分钟时,并发量可设置为 4-6 。若 ETL 多为运行时间超出 30 分钟的任务,并发量建议设置在 4 以内。

    说明

    以上信息仅供参考,详细情况建议联系观远技术支持/运维评估后再进行调整,过高的并发可能导致同时运行的 ETL 因 CPU 资源不足而效率低下,故需慎重调整。

  3. 剩余配置根据自身需求来进行设置,但不建议调整过大,复杂的 ETL 对性能的消耗是很严重的,尽量减少过于复杂的 ETL 的产生(对于复杂逻辑的 ETL 可以考虑拆分成多个 ETL,并配合高级调度功能,做顺序调度); 

利用高级调度进行 ETL 调度提效

对于处理数据按日期增长且历史数据不变的 ETL 任务,可以利用高级调度功能进行增量更新,从而提高效率,减少资源消耗。

更多 ETL 实践内容详见 ETL开发者最佳实践