ETL治理的实践思路
1. 概述
本文是一篇介绍ETL治理的文章,旨在帮助用户解决ETL遇到排队延迟时的排查和优化问题。
文章涵盖了ETL调度在数据处理流程中的重要性,以及如何通过监控、预警和问题定位来有效管理ETL调度情况,确保业务数据的时效性和准确性。
1.1. 应用场景
适用于以下场景时,您可以学习该篇文章。
-
数据出数时间异常,比如发现某天的 ETL 出数效率比往日慢;
-
ETL排队情况严重,比如之前没有 ETL 排队,现在有了大量的排队情况;
-
资源控制角度 等。
1.2. 实践案例
在大数据处理流程中,ETL调度的稳定性和效率是保障业务数据时效性和准确性的重要环节。近期发现存在ETL出数时间大幅延迟及任务排队数量激增等异常现象,这可能严重影响到我们的数据分析和决策支持能力。
本文档旨在利用观远 BI 现有的智能云巡检、任务管理、运维管理、管理员设置中的全局管控等功能,对ETL调度情况进行有效监控、预警及问题定位。
2. 示例步骤
2.1. 判断是否存在服务异常情况
思路:一般 ETL排队严重时,可能是多方面导致的问题,但可以优先检查 Spark 服务是否正常运行。
入口:可以查看管理员设置-运维设置-服务管理,查看是否有重启记录。
如果发现 Spark 服务存在重启情况,这很可能是服务异常导致的排队问题。在这种情况下,建议立即联系观远相关运维/技术支持,以排查本次 Spark 重启的原因,从而避免后续问题的再次发生,进而防止ETL任务调度阻塞。
2.2. 判断业务是否是因为业务增长导致
1. 查看云巡检报告:首先,检查云巡检报告,关注ETL的调度数是否比之前有显著增加。
2. 检查调度合理性:如果发现大量ETL任务调度的增加,需要先评估这些调度是否合理。
在云巡检报告中找到【最近31天更新运行次数top20的ETL】,检查是否存在调度次数异常高且不符合业务调度逻辑的ETL。
需要进行相关调整,过高的调度不仅占用ETL定时更新的并发,还可能占用过多的CPU资源,因此合理的调度对于BI的稳定性至关重要。
3. 处理正常业务增长导致的ETL调度增长: 如果ETL调度的增长是正常业务增长所致,且发现CPU使用率基本维持在一个高水准(例如80%以上),这可能表明资源不足以支持业务的增长。在这种情况下,建议联系观远运维/技术支持,评估扩容事项,以确保足够的资源支持业务增长。
2.3. 优化方向
优化高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资源不足而效率低下,故需慎重调整。
3、剩余配置根据自身需求来进行设置,但不建议调整过大,复杂的ETL对性能的消耗是很严重的,尽量减少过于复杂的ETL的产生(对于复杂逻辑的ETL可以考虑拆分成多个ETL,并配合高级调度功能,做顺序调度);
利用高级调度进行ETL调度提效
对于处理数据按日期增长且历史数据不变的ETL任务,可以利用高级调度功能进行增量更新,从而提高效率,减少资源消耗。
相关参考文档:ETL与高级调度的配合实践 - 观远 BI - 观远数据帮助中心