作者:酷的带_201 | 来源:互联网 | 2022-12-01 19:26
我正在设计一个多租户工作负载自动化软件(可自动运行Jobs的软件)。为此,我正在创建一个默认的Job配置类。默认情况下,此类中指定的配置将应用于所有类型的作业。
租户(作业的所有者)可以选择针对其特定类别的作业覆盖这些默认配置。
例如:
# Default configurations for all types of Jobs
class DefaultConfigurations:
def __init__(self, job_defintion):
self.job_state_database = DEFAULT_DB
self.job_definition_repository_type = DEFAULT_REPO
....
# there will be 100's of configurations like this.
现在,如果某些租户想要为其特定类型的作业覆盖默认应用程序配置,则他们可以继承DefaultConfiguration类并覆盖他们想要覆盖的配置。
例如:
# These overridden configurations will be applied to all the HiveJobs.
class HiveJobs(DefaultConfigurations):
def __init__(self, job_definition):
self.job_state_database = "sql"
self.job_definition_repository_type = "svn"
# These overridden configurations will be applied to all the SparkJobs.
class SparkJobs(DefaultConfigurations):
def __init__(self, job_definition):
self.job_state_database = "MongoDb"
if (job_definition.technology == "Old")
self.job_state_database = "sql"
对于所有其他类型的作业,将使用默认配置。
各个作业也有其定义(以XML形式提及)。在单个作业定义XML文件中,还指定了作业类。例如,Hive Job将在其定义中将其类指定为“ hive”。
一个配置单元作业的job_definition文件示例:
name hello_world_from_hive
class hive
command echo "hello world from Hive"
cron_schedule 5 4 * * *
在运行时,Job Executor将检查其定义文件中指定的Job类,并相应地选择配置类(例如,上例中的DefaultConfigurations,HiveJobs或SparkJobs)。
Job执行程序将从XML文件构造一个job_definition对象,并将该Job定义对象传递给相应的配置类,以获取执行此作业所需的最终配置。这是必需的,因此也可以基于某些运行时参数来添加/删除某些配置。请注意,首选项将优先于各个作业定义文件中覆盖的配置。
我不确定以上方法是否是用Python编写此类配置文件的最佳方法。