Spark 临时作业数据保留和清理

https://blueprints.launchpad.net/sahara/+spec/spark-cleanup

在集群配置时创建可配置的 cron 作业,以清理 Spark 作业的数据,从而简化长期运行集群的维护。

问题描述

当前的 Spark 插件将任何作业运行的数据存储在 /tmp 目录中,没有过期策略。虽然这对于短生命周期集群是可以接受的,但它会增加长期运行集群的维护工作,这些集群可能会随着时间的推移而耗尽空间。需要一种自动清理空间的机制。

提议的变更

在创建任何新的 Spark 集群时,一个脚本(来自 sahara.plugins.spark/resources)将使用以下变量进行模板化(这些变量将在 Spark 的 config_helper 模块中定义,因此每个集群定义一次)

  • 最小清理秒数

  • 最大清理秒数

  • 最小清理兆字节数

然后,该脚本将被推送到 /etc/hadoop/tmp_cleanup.sh。在以下情况下,将不会推送任何脚本

  1. 最大清理秒数为 0(或更小)

  2. 最小清理秒数和最小清理兆字节数都为 0(或更小)

同样在集群配置时,将创建一个 cron 作业,以每小时运行一次该脚本。

该脚本将遍历集群上的每个现有作业目录;如果它找到一个比最大清理秒数更旧的目录,它将删除该目录。然后,它将检查剩余目录集的大小。如果数据量大于最小清理兆字节数,那么它将从最旧的目录开始删除比最小清理秒数更旧的目录,直到剩余数据小于最小清理兆字节数或没有足够年龄的目录为止。

替代方案

可以开发更多复杂的方案来解决此问题,包括每个作业的保留信息、数据优先级分配(以有效地创建删除的优先级队列)等。然而,上述计划虽然允许单个集群类型具有单个保留策略,但不需要在集群创建后对该策略进行过多的维护或接口,这可能对大多数用户来说都是合适的。复杂的保留和归档策略超出了此便利功能的预期范围,并且很容易成为一个完整的项目。

数据模型影响

无;所有新数据都将存储为集群配置。

REST API 影响

无;有效的 Spark 集群模板配置参数将在当前接口允许的情况下记录。

其他最终用户影响

无。

部署者影响

无。

开发者影响

无。

Sahara-image-elements impact

无。

Sahara-dashboard / Horizon 影响

无。(config_helper.py 变量将自动在 Horizon 中显示。)

实现

负责人

主要负责人

egafford

工作项

  • 创建定期作业

  • 创建删除脚本

  • 测试

依赖项

测试

由于此功能完全是 Sahara 内部的,并且只需要到 Spark 集群的远程 shell 连接(如果没有这个连接,许多其他测试也会失败),我相信对此功能的 Tempest 测试是不必要的。单元测试足以覆盖此功能。

文档影响

用于设置保留策略的变量需要记录。

参考资料

https://blueprints.launchpad.net/sahara/+spec/spark-cleanup