从Airflow触发Databricks作业,而无需启动新集群

时间:2019-02-06 20:01:57

标签: airflow databricks

我正在使用气流来触发数据块上的作业。我有许多DAG在运行databricks作业,但我希望只使用一个群集而不是多个群集,因为据我所知,这将减少这些任务产生的成本。

使用DatabricksSubmitRunOperator有两种方法可以对数据块运行作业。要么使用运行中的集群通过ID

调用它
'existing_cluster_id' : '1234-567890-word123',

或启动新集群

'new_cluster': {
    'spark_version': '2.1.0-db3-scala2.11',
    'num_workers': 2
  },

现在,我想避免为每个任务启动一个新集群,但是该集群在停机期间会关闭,因此即使它是id也不可用,并且会出现错误,所以我的唯一选择视图是一个新的群集。

1)是否有一种方法可以让集群即使处于关闭状态也可以通过id进行调用?

2)人们只是简单地使集群存活吗?

3)还是我完全错了,为每个任务启动集群不会产生更多费用?

4)我完全错过了什么吗?

1 个答案:

答案 0 :(得分:1)

根据@YannickSSE的评论回复进行更新
我不使用数据块;您是否可以使用与可能正在运行或可能不会运行的群集相同的ID启动新群集,并且在运行时将其设为空运行?也许不是,或者您可能不会问这个。 响应:否,在启动新集群时无法提供ID。

您能编写一个测试集群是否存在的python或bash运算符吗? (响应:这将是测试作业提交……不是最佳方法。。)如果找到并成功,则下游任务将使用现有的集群ID触发您的任务,但是如果不是这样,下游任务可以使用trigger_rule all_failed来执行相同的任务,但是要使用新的群集。然后,这两个任务DatabricksSubmitRunOperator可以有一个trigger_rule one_success的下游任务。 (响应:或使用分支运算符确定执行的运算符。

这可能不是理想的,因为我想那时您的集群ID会不时发生变化,导致您不得不跟上。 …集群是该操作员的数据砖挂钩连接的一部分,并且可以更新吗?也许您想在需要它的任务中将其指定为{{ var.value.<identifying>_cluster_id }},并将其更新为气流变量。 (响应:群集ID不在钩子中,因此变量或DAG文件在发生更改时都必须进行更新。