命令模板

DAG 工作流中,已经介绍过 Keeper 中命令 Command 相关的内容。命令模板 Command Template 也是 Keeper 特有的概念,目的是为了提高命令的复用性,快速配置调度任务。命令模板的原理是先设置好一个命令模板,然后再设定好相应的参数。在配置调度时,只需要传递相应的参数即可,根据传递的参数不同,即可运行不同的任务。命令模板主要使用 PQL 进行配置,也支持通过嵌入 PQL 配置 Shell 和 Python 脚本。命令模板在 Master 管理工具中配置,路径为“系统”-“Keeper监控”-“命令模板”

PQL 命令模板

这里举个例子进行说明,假如已经配置的模板如下:

这是一个简单的 PQL 模板,功能是将数据从一个数据源转移到另一个数据源。这个模板需要传递以下 5 个参数:

待传递的参数通过对象格式 Json 进行配置,如:

传递的参数都会自动转成变量,如参数source_database会自动转成变量$source_database,类型为文本字符串。当然也可能使用基本传参格式#{source_database},这种方式会忽略参数类型。上例通过传递参数给命令模板,就形成了一个基本的两个数据库之间的数据转移的逻辑。通过传递不同的参数,则可以实现其他数据库之间的不同数据表之间的转移逻辑。当然这只是一个特别简单的模板,实际应用中远比这复杂得多,比如增量抽取、大数据量等,这个例子只是为了说明命令模板如何运作的。

Shell 命令模板

跟 DAG 中 Command 的配置一样,Shell 的模板逻辑中可以嵌入 PQL 以实现更高的灵活性。

上例可以传递参数比较少,只有两个:

上例中$task_time变量是默认传递的参数,其他默认传递的参数见工作流 DAG 中的介绍。

这个模板在运行时,会先处理 PQL 相关的逻辑,生成最终的 Shell 命令,然后再以 Shell 命令运行。嵌入式 PQL 的语法非常简单,语法非常简单,基本上 Jsp 或 Asp 风格的嵌入语法<%`和`%>就够用了。

Python 命令模板

Python 命令模板的处理逻辑与 Shell 命令模板完全相同,只不过核心逻辑由 Shell 改为了 Python,仍由 PQL 作为辅助逻辑。

上例中传递两个参数:

假设 Python 逻辑是一个机器学习算法,可传入不同的训练集和测试集,从而生成不同的结果,无需要在多个调度命令中配置大量重复的代码。

小结

命令模板在本质上也可以理解为是一个“函数”,其目的是减少重复代码的编写和维护,通过传入不同的参数来得到不同的结果。


参考链接


微信公众号
码农老吴  |  星源工作室  |  开发月志  |  问题反馈
联系我们:wu@qross.io     手机/微信:18618171102
京 ICP 备 20027445 号
$(h1)!