通过 Azure 数据工厂启动 Databricks 作业并出现 Webhook 活动问题

问题描述 投票:0回答:1

我正在尝试使用 Webhook 活动通过 ADF 启动 Databricks 作业,但遇到了一些问题。

首先,我在这项工作中使用的 python 脚本位于 Github 存储库中,所以我认为那些预构建的 Databricks 活动不是一个选项(Notebook、JAR、Python)。 其次,我设法使用 Web 活动开始这项工作,但在这种情况下,我也必须使用 Until 活动,但我不想使用它。

但是当我对 Webhook 活动尝试相同的操作时,我的 ADF 管道陷入“正在进行”状态。此外,该作业甚至没有在 Databricks 实例内启动,这实际上是在我使用 Web 活动尝试它时发生的,几乎具有相同的配置。

以下是两种方法的两个 ADF 输出之间的差异:

WEBHOOK ACTIVITY OUTPUT (it doesn't start the execution of the databricks job)
{
    "url": "https://<instance-id>.azuredatabricks.net/api/2.1/jobs/run-now",
    "method": "POST",
    "headers": {},
    "body": "{\"job_id\":815277479768855,\"python_params\": <some-python-params>}",
    "timeout": "00:10:00",
    "authentication": {
        "type": "MSI",
        "resource": "2ff814a6-3304-4ab8-85cb-cd0e6f879c1d"
    }
}


WEB ACTIVITY OUTPUT (it starts the execution of the databricks job)
{
    "url": "https://<instance-id>.azuredatabricks.net/api/2.1/jobs/run-now",
    "connectVia": {
        "referenceName": "labs-dq-integrationRuntime",
        "type": "IntegrationRuntimeReference"
    },
    "method": "POST",
    "headers": {},
    "body": "{\"job_id\":815277479768855,\"python_params\":<some-python-params>}",
    "authentication": {
        "type": "MSI",
        "resource": "2ff814a6-3304-4ab8-85cb-cd0e6f879c1d"
    }
}

因此,唯一的区别在于“connectVia”属性,该属性在 Webhook 调用中缺失。我不确定它到底有多重要,而且我仍然没有找到将其添加到 Webhook 调用中的方法。

虽然我有一种有效的方法(网络活动),但任何帮助将不胜感激!我真的不明白我错过了什么,这真的开始让我烦恼。

azure azure-data-factory databricks webhooks azure-databricks
1个回答
0
投票

您卡在进行中的原因是

WEBHOOK ACTIVITY
是同步的并等待作业完成。

它的工作原理是,每当您提出请求时,它都会在正文中额外添加

callBackUri
,如下所示:

job_id: 165015136743719
notebook_params: [object Object]
callBackUri: https://eastus.svc.datafactory.azure.com/dataplane/workflow/callback/040.............................309c621743?callbackUrl=AAEAFKFqMjDlR8.......................a2&shouldReportToMonitoring=True&pipelineResourceType=Pipeline&activit

每当调用它时,作业就完成了;否则,它将显示进行中,直到您给出的

Timeout
,即
00:10:00

但是在Databricks中,请求体内部除了参数之外不能访问其他字段,所以不会有调用,会一直等到超时。

我的建议是使用 Web 活动运行作业,并使用 Web 活动中返回的运行 ID 来检查状态和输出。

在第二个 Web 活动 2 URL 字段中添加以下表达式:

@concat('https://databricks-instance/api/2.0/jobs/runs/get-output?run_id=',activity('Web1').output.run_id)

这是管道:

Web1 输出:

Enter image description here

添加等待 10-15 秒。

Web2 输出:

Enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.