跳到主要内容
版本:3.0.0

钩子

堆栈可以在 Ambari 操作的以下时间点添加钩子:

  • before ANY
  • before and after INSTALL
  • before RESTART
  • before START

Stack Inheritance 中所述,如果当前堆栈版本定义了 hooks 目录,它会替换父堆栈版本中的 hooks 目录。这意味着父级目录中包含的文件不会被继承。需要从该目录结构中复制所有希望保留的文件。

hooks 目录应包含 5 个子目录:

  • after-INSTALL
  • before-ANY
  • before-INSTALL
  • before-RESTART
  • before-START

每个 hook 目录可以包含 3 个子目录:

  • files
  • scripts
  • templates

scripts 目录是主要目录,必须提供。该目录必须包含 hook.py 文件,也可以包含用于初始化变量的其他 Python 脚本(例如 params.py),或包含 hook.py 所使用函数的其他工具文件。

files 目录可以包含任意非 Python 文件,例如脚本、jar 文件或 properties 文件。

templates 文件夹可以包含用于设置 properties 文件的所需 j2 文件。

hook.py 文件应扩展 resource_management/libraries/script/hook.py 中定义的 Hook 类。命名约定是使用 hook 文件夹命名钩子类,例如类位于 after-INSTALL 文件夹中时命名为 AfterInstallHook。hook.py 文件必须定义 hook(self, env) 函数。下面是一个钩子示例:

from resource_management.libraries.script.hook import Hook

class AfterInstallHook(Hook):

def hook(self, env):
import params
env.set_params(params)
# Call any functions to set up the stack after install

if __name__ == "__main__":
AfterInstallHook().execute()