我正在设计一个多租户工作负载自动化软件(可自动运行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.
Run Code Online (Sandbox Code Playgroud)
现在,如果某些租户想要为其特定类型的作业覆盖默认应用程序配置,则他们可以继承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"
Run Code Online (Sandbox Code Playgroud)
对于所有其他类型的作业,将使用默认配置。
各个作业也有其定义(以XML形式提及)。在单个作业定义XML文件中,还指定了作业类。例如,Hive Job将在其定义中将其类指定为“ hive”。
一个配置单元作业的job_definition文件示例:
<job_definition>
name hello_world_from_hive
class hive
command echo "hello world from Hive"
cron_schedule 5 4 * * *
</job_defintion>
Run Code Online (Sandbox Code Playgroud)
在运行时,Job Executor将检查其定义文件中指定的Job类,并相应地选择配置类(例如,上例中的DefaultConfigurations,HiveJobs或SparkJobs)。
Job执行程序将从XML文件构造一个job_definition对象,并将该Job定义对象传递给相应的配置类,以获取执行此作业所需的最终配置。这是必需的,因此也可以基于某些运行时参数来添加/删除某些配置。请注意,首选项将优先于各个作业定义文件中覆盖的配置。
我不确定以上方法是否是用Python编写此类配置文件的最佳方法。
Bla*_*ght -2
您可以使用ConfigParser,它非常易于使用,例如:
import configparser
config = configparser.ConfigParser()
config['job'] = {};
config['job']['state_database'] = 'DEFAULT_DB';
config['job']['definition_repository_type'] = 'DEFAULT_REPO';
with open('example.ini', 'w') as configfile:
config.write(configfile)
# and read
config.read('example.ini')
print(config.sections())
print(config['job']['state_database'])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
866 次 |
| 最近记录: |