任务耗时太长怎么办?
开发完需求之后,并不是万事大吉了。因为离线任务每天要运行,任务维护的工作,有时候比开发成本还高。
比较常见的问题是任务占据大量资源,耗时太久,无法按时产出,或者直接因资源不足失败。
如果只是个别任务占用过多资源,增加维护成本,还好解决。大不了拆分任务,或者直接下线任务。
最怕的是开发任务的时候,没有考虑过任务运行效率,导致整体资源不足以维护任务稳定按时产出,各种意外频发,防不胜防。那就不是处理个别任务就能解决的问题了。
而此时,要么财大气粗,直接加倍扩容。否则只能投入额外的人力对任务进行优化。
任务优化目的是为了任务减少资源(主要指计算资源)占用,减少任务耗时。
单纯的用资源换时间或时间换资源,,我认为只是换了一种任务运行方案,不算是优化任务,除非对应资源多到不用是浪费的程度。
提到任务优化,不少人第一时间考虑的是技术上的,是不是数据倾斜?是不是小文件过多?是不是reduce数量太少?
但我觉得,在考虑如何使用技术手段之前,还有更应该考虑的问题
- 任务是否能下线?下线的任务优化程度是100%。
- 任务能不能降低频率?原来15min一次的能不能改成60min?能释放某些时段的资源。
- 任务能不能延后运行,放到资源空闲时期运行?空闲的计算资源基本上等于浪费,能用就是多出来的。
- 任务读取的数据量能不能减少?比如原来任务要取近30天的数据,能不能只取15天。减少一半数据量,会减少大