ETL治理的实践思路
概述
本文是一篇介绍 ETL 治理的文章,旨在帮助用户解决 ETL 遇到排队延迟时的排查和优化问题。
文章涵盖了 ETL 调度在数据处理流程中的重要性,以及如何通过监控、预警和问题定位来有效管理 ETL 调度情况,确保业务数据的时效性和准确性。
应用场景
适用于以下场景时,您可以学习该篇文章。
-
数据出数时间异常,比如发现某天的 ETL 出数效率比往日慢;
-
ETL 排队情况严重,比如之前没有 ETL 排队,现在有了大量的排队情况;
-
资源控制角度 等。
实践案例
在大数据处理流程中,ETL 调度的稳定性和效率是保障业务数据时效性和准确性的重要环节。近期发现存在 ETL 出数时间大幅延迟及任务排队数量激增等异常现象,这可能严重影响到我们的数据分析和决策支持能力。
本文档旨在利用观远 BI 现有的智能云巡检、任务管理、运维管理、管理中心中的全局管控等功能,对 ETL 调度情况进行有效监控、预警及问题定位。
示例步骤
判断是否存在服务异常情况
思路: 一般 ETL 排队严重时,可能是多方面导致的问题,但可以优先检查 Spark 服务是否正常运行。
入口: 可以查看「管理中心 > 运维管理 > 服务管理」,查看是否有重启记录。
如果发现 Spark 服务存在重启情况,这很可能是服务异常导致的排队问题。在这种情况下,建议立即联系观远相关运维/技术支持,以排查本次 Spark 重启的原因,从而避免后续问题的再次发生,进而防止 ETL 任务调度阻塞。

判断业务是否是因为业务增长导致
-
查看云巡检报告: 首先,检查云巡检报告,关注 ETL 的调度数是否比之前有显著增加。

-
检查调度合理性: 如果发现大量 ETL 任务调度的增加,需要先评估这些调度是否合理。
在云巡检报告中找到「最近 31 天更新运行次数 top20 的 ETL」,检查是否存在调度次数异常高且不符合业务调度逻辑的 ETL。
需要进行相关调整,过高的调度不仅占用 ETL 定时更新的并发,还可能占用过多的 CPU 资源,因此合理的调度对于 BI 的稳定性至关重要。

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

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

针对消耗大量 CPU 资源的 ETL 任务,可以参考文档 ETL 优化建议 进行优化,减少不必要的资源消耗,防止长期占用资源导致 ETL 调度阻塞。
分散 ETL 调度时间
方法 1: 通过云巡检中的「最近 31 天 ETL 运行时间分布」分析,检查是否存在某个时间段 ETL 运行数量过多。建议在不影响业务的情况下,尽量分散到每个时间段执行,或者在夜间空闲时间段执行,以避免集中在同一时间段运行,造成阻塞。

方法 2:对于部分客户采用了 Spark 资源隔离(卡片和 ETL 分别部署了一个 job engine),在凌晨 ETL 调度集中导致排队的情况。
若凌晨无看数需求,建议与观远技术支持/运维沟通,配置动态切换 job engine 的部署。在夜间将卡片的 job engine 也提供给 ETL 使用,以确保 ETL 在凌晨有更多计算资源可用,提高资源利用率,减缓 ETL 排队。
如何查看是否部署了双 job:可进入「管理中心 > 运维管理 > 服务管理」处,查看「通用计算引擎服务」和「ETL 计算引擎服务」。

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

限制 ETL 全局参数配置
入口:「管理中心>系统设置>通用设置>运行参数」页面。
-
可以对任务最大运行时长进行限制。如:
-
设置任务最大运行时长,控制 ETL 的最大运行时长,避免异常 ETL 任务调度长时间阻塞。
-
或自定义时间段设置运行时长,例如白天时间段运行不超过 30 分钟,其他时间段不超过 1 小时进行全局管控。

-
-
调整任务并行数,该配置主要针对定时更新和次联级更新的 ETL 任务。一般根据机器配置以及自身 ETL 任务大小进行配置。如:16C128G 的情况下,大量 ETL 任务运行时间低于 10 分钟时,并发量可设置为 4-6 。若 ETL 多为运行时间超出 30 分钟的任务,并发量建议设置在 4 以内。
说明以上信息仅供参考,详细情况建议联系观远技术支持/运维评估后再进行调整,过高的并发可能导致同时运行的 ETL 因 CPU 资源不足而效率低下,故需慎重调整。
-
剩余配置根据自身需求来进行设置,但不建议调整过大,复杂的 ETL 对性能的消耗是很严重的,尽量减少过于复杂的 ETL 的产生(对于复杂逻辑的 ETL 可以考虑拆分成多个 ETL,并配合高级调度功能,做顺序调度);

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