我有一个作业A,需要将Azkaban流“ F”作为依赖项进行调用。我该如何提及作业A对流程F的依赖性?
这就是我现在与获取远程存储流“ F”有关的内容:
session = remote.Session("user@https://AZKABANURL")
workflows = session.get_workflows("FlowFProjectName")
flows = workflows[u"flows"]
flow_id = flows[0]["flowId"]
workflows = session.get_workflow_info("FlowFProjectName", flow_id)
node_id = workflows["nodes"][0]["id"]
现在我有了node_id,它是流F中最后一个作业的名称,如何在作业A中添加流F的依赖关系?是这样吗?
jobs["A"] = {
"type": "command",
"command": 'echo "Hello World"',
"dependencies": "F"
}
执行以下操作会使我在上传到Azkaban时出错(通过在项目中捆绑此作业A):
jobs["a"] = Job({"type": "command", "command": 'echo "Hello World"',"dependencies": node_id})
这是错误:
azkaban.util.AzkabanError: Installation Failed.
Error found in upload. Cannot upload.
a cannot find dependency <node_id>
在这里,node_id是我所遮掩的作业的实际名称。
有人可以建议我添加对作业内部外部流的这些依赖吗?外部流程在Azkaban上(这就是为什么我必须使用Azkaban.remote)。
答案 0 :(得分:0)
我找到了问题的答案:
选项1:这更容易理解-您使用while循环不断询问Azkaban是否仍在运行特定作业/流程。但是在执行此操作时,您应该使while循环持续运行几个小时,再加上使用get_running_workflows()方法检查流是否正在运行的方式。此方法不返回某个流的某个实例是否仍在运行,而仅返回所述流的任何实例是否在运行。
选项2:如果流F以作业f结尾,并且在流F完成执行后需要运行作业A,则将作业添加到流F的末尾,说f',以便f'调用Job
如果这很难理解:
原始工作图: 流程F,作业A依赖于流程F: f1-> f2-> ... f
添加启动作业后: 流f': f1-> f2-> ... f -> f'
在这里,f'应包含一个session.run_workflow(project_A, flow_A)
这是比选项1更好的方法,因为您可以确定只有在流程f成功执行后,才启动作业A。 我希望这对以后的人有所帮助。