好的,这是一篇根据您提供的资料,并结合我作为资深新闻记者和编辑的经验撰写的新闻报道:
标题:作业帮深度优化 Apache DolphinScheduler:解决核心缺陷,提升大数据平台稳定性
引言:
在数字化浪潮席卷各行各业的今天,数据已成为企业发展的核心驱动力。为了高效处理海量数据,任务调度系统的重要性日益凸显。作业帮,作为国内领先的在线教育平台,其大数据团队在基于 Apache DolphinScheduler 构建的 UDA 任务调度平台中,处理着日均百万级别的任务量。然而,随着使用深入,他们发现开源版本的 DolphinScheduler 3.0.0 存在一些难以通过运维手段规避的问题,这些问题不仅影响了数据平台的稳定性,还给问题排查带来了诸多挑战。为此,作业帮大数据团队进行了深入的缺陷修复与优化,并积累了丰富的运维经验,为大数据平台的稳定运行提供了有力保障。
正文:
挑战与需求:
作业帮的 UDA 任务调度平台基于 DolphinScheduler 的 Master 和 Worker 服务搭建,充分利用了 Master 节点的高并发调度能力和 Worker 节点的分组隔离能力。然而,开源版本的 DolphinScheduler 3.0.0 在实际应用中暴露了一些问题,主要集中在以下几个方面:
- 缺乏反压与过载保护机制: 当系统负载过高时,无法自动推迟任务执行,容易导致系统崩溃。
*任务分配不均衡: 容易出现任务倾斜,影响整体调度效率。 - 运行过程存在“副作用”: 调度引擎在运行过程中会产生一些“副作用”,导致服务不稳定,需要定期重启。
- 可观测性不足: 核心组件对外暴露的可观测性指标有限,问题排查定位困难。
为了解决这些问题,作业帮大数据团队对 DolphinScheduler 3.0.0 进行了深入的优化改造,致力于打造一个稳定、高效、可观测的任务调度引擎。
优化实践:
1.HadoopUtils 引发的线程泄漏问题:
在一次巡检中,作业帮团队发现服务节点的线程数持续上升,经过排查,发现问题出在 HadoopUtils 的 Cache 机制上。DolphinScheduler 的 HadoopUtils 会以恒定速率生成新的实例并放入 Cache,但在实例化的过程中,会创建 HDFS FileSystem,却不会关闭原有的 FileSystem。在生产环境中,作业帮使用的是腾讯云提供的 CosFileSystem 插件,该插件使用多线程加速文件上传/下载,导致线程泄漏问题更加严重。
解决方案:
作业帮团队在更新 Cache 时,增加了关闭 FileSystem 的操作,并通过读写锁保证异步关闭不会导致文件操作失败。修复后,JVM 线程数保持在一个小恒定范围内,有效解决了线程泄漏问题。
2. TaskExecuteRunnable 内存泄漏引发 CPU 飙高问题:
作业帮团队发现,随着运行时间增长,Master 服务的 CPU 使用率不断上升。通过火焰图分析,发现 Master 中的任务事件处理器消耗了大量 CPU 资源。原来,DolphinScheduler 的 Master 服务在运行工作流时,会为每个任务实例生成一个 TaskExecuteRunnable 对象,任务的生命周期事件会存放在该对象中。然而,当任务运行结束后,TaskExecuteRunnable 对象并不会被释放,导致任务事件处理线程空转时间越来越长,CPU 消耗也随之增加。
解决方案:
作业帮团队修改代码,在任务执行结束后,移除内存中的 TaskExecuteRunnable对象。修复后,Master 的 CPU 使用率始终维持在一个小的恒定范围内,有效解决了内存泄漏导致的 CPU 飙高问题。
3. Master 执行逻辑任务重复提交事件,导致事件堆积问题:
DolphinScheduler 中任务分为逻辑任务和物理任务,逻辑任务在Master 中执行,物理任务在 Worker 中执行。无论是哪种任务,在 Master 处理过程中都会经历 Dispatch 和 Run 阶段。逻辑任务的 Run 阶段运行在 Master 中,而物理任务的 Run 阶段运行在 Worker 中。当 Dispatch 阶段执行成功后,任务会注册到 StateWheelThread 中,该组件会定时为每个任务生成 TaskStateChangeEvent,提交到任务的事件队列中。TaskStateChangeEvent 被处理时会触发 Run 任务。
然而,对于逻辑任务,StateWheelThread 会不断触发执行,如果消费者处理事件的速度小于生产者生产的速度,就会出现事件堆积。由于逻辑任务的运行时间通常较长,且生产者生产事件是纯内存计算,而消费者处理事件需要多次查询数据库,因此极易出现事件积压,导致整个 Master 中所有任务的状态事件处理出现延迟,甚至导致 Master OOM 服务宕机。
解决方案:
(此处信息不完整,根据上下文推断,作业帮团队应该对StateWheelThread的生产消费模型进行了优化,例如:增加消费者的处理能力,或者优化事件处理逻辑,避免数据库瓶颈等。具体优化细节需要更多信息。)
结论:
作业帮大数据团队对 Apache DolphinScheduler 3.0.0 的缺陷修复与优化,不仅解决了实际生产环境中遇到的难题,还提升了整个 UDA 任务调度平台的稳定性和效率。通过对 HadoopUtils 线程泄漏、TaskExecuteRunnable 内存泄漏以及 Master 执行逻辑任务重复提交事件等问题的深入分析和修复,作业帮团队为大数据平台的稳定运行提供了有力保障。
此次优化实践,也为其他使用 DolphinScheduler 的企业提供了宝贵的经验借鉴。在开源技术日益普及的今天,深入理解和优化开源软件,才能更好地发挥其价值,为企业发展提供更强大的支撑。未来,作业帮大数据团队将继续探索和实践,为构建更加稳定、高效的大数据平台贡献力量。
参考文献:
- InfoQ 文章:作业帮基于 Apache DolphinScheduler 300 的缺陷修复与优化
(注:由于原文未提供详细的StateWheelThread 优化方案,此处结论部分进行了推断性描述。如需更精确的报道,需要补充相关信息。)
Views: 0