通过 Powershell dataSecurityMode 不附加创建 Azure Databricks 链接服务

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

我尝试运行此命令来创建 Azure Databricks 链接服务

Set-AzDataFactoryV2LinkedService -Force -ResourceGroupName MYDEVRESOURCEGROUP -DataFactoryName MYDEVADF -Name LS_ADB_JOB_01 -DefinitionFile ./LS_ADB_JOB_01.json

LS_ADB_JOB_01.json
包含内容

        .
        .
        .
            "newClusterSparkEnvVars": {
                "PYSPARK_PYTHON": "/databricks/python3/bin/python3"
            },
            "newClusterVersion": "@linkedService().ClusterVersion",
            "newClusterDriverNodeType": "@linkedService().DriverNodeType",
            "clusterOption": "Autoscaling",
            "newClusterInitScripts": [
                "/Workspace/Ingestion/init_odbc_driver.sh"
            ],
            "dataSecurityMode": "SINGLE_USER"
        },
        .
        .
        .

然后此命令成功运行,但 ADF 上未出现

"dataSecurityMode": "SINGLE_USER"

enter image description here

我该如何解决这个问题?

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

出现此问题的原因是,使用 PowerShell 在 Azure 数据工厂 (ADF) 中创建 Azure Databricks 链接服务

时,未识别或应用 
dataSecurityMode 属性。出现这种情况的原因通常是:

  1. PowerShell SDK 或 API 限制:您正在使用的 Azure PowerShell SDK 或数据工厂 REST API 的版本可能尚不支持属性
    dataSecurityMode
  2. ADF 链接服务架构限制:将
    Set-AzDataFactoryV2LinkedService
    命令与定义文件一起使用时,并非所有属性都可以直接应用。

故障排除和解决方案

1. 验证SDK和API版本兼容性

确保您使用最新的 Az PowerShell ModuleAzure API 版本

  • 更新您的 Az 模块:
    Update-Module -Name Az -Force
    
  • 确认版本:
    Get-InstalledModule -Name Az
    
  • 检查您的版本是否支持
    dataSecurityMode
    Azure Databricks 链接服务。

2. 使用 REST API 手动更新链接服务

如果 PowerShell 模块无法识别

dataSecurityMode
属性,您可以直接与 ADF REST API 交互以创建或更新链接服务。

具体操作方法如下:

第 1 步:为链接服务准备 JSON 负载

{
  "name": "LS_ADB_JOB_01",
  "properties": {
    "type": "AzureDatabricks",
    "typeProperties": {
      "domain": "adb-<your-databricks-instance>.azuredatabricks.net",
      "newClusterConfig": {
        "newClusterDriverNodeType": "@linkedService().DriverNodeType",
        "newClusterVersion": "@linkedService().ClusterVersion",
        "clusterOption": "Autoscaling",
        "dataSecurityMode": "SINGLE_USER",
        "newClusterSparkEnvVars": {
          "PYSPARK_PYTHON": "/databricks/python3/bin/python3"
        },
        "newClusterInitScripts": [
          "/Workspace/Ingestion/init_odbc_driver.sh"
        ]
      }
    }
  }
}

第2步:调用REST API来创建/更新链接服务 在 PowerShell 中使用

Invoke-RestMethod
运行以下命令:

# Define variables
$resourceGroupName = "MYDEVRESOURCEGROUP"
$dataFactoryName = "MYDEVADF"
$linkedServiceName = "LS_ADB_JOB_01"
$subscriptionId = "<YourSubscriptionId>"
$accessToken = (Get-AzAccessToken).Token  # Get Azure access token

# REST API URL
$url = "https://management.azure.com/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.DataFactory/factories/$dataFactoryName/linkedservices/$linkedServiceName?api-version=2018-06-01"

# Load JSON payload
$body = Get-Content -Raw -Path "./LS_ADB_JOB_01.json" | ConvertFrom-Json | ConvertTo-Json -Depth 10

# Send PUT request to update the Linked Service
Invoke-RestMethod -Method Put -Uri $url -Headers @{Authorization = "Bearer $accessToken"; "Content-Type" = "application/json" } -Body $body

3. 验证 ADF UI 中的属性支持

  1. 转到 Azure 门户中的 Azure 数据工厂 UI。
  2. 手动编辑 Azure Databricks 链接服务
  3. 检查链接服务配置中是否提供
    dataSecurityMode
    选项。

如果它出现在 UI 中但不是通过 PowerShell 命令出现,则 SDK 版本可能已过时。


4. 使用ARM模板部署

您可以使用 ARM(Azure 资源管理器)模板部署链接服务,该模板明确支持所有属性,包括

dataSecurityMode

ARM 模板示例:

{
  "resources": [
    {
      "name": "LS_ADB_JOB_01",
      "type": "Microsoft.DataFactory/factories/linkedservices",
      "apiVersion": "2018-06-01",
      "properties": {
        "type": "AzureDatabricks",
        "typeProperties": {
          "domain": "adb-<your-databricks-instance>.azuredatabricks.net",
          "newClusterConfig": {
            "dataSecurityMode": "SINGLE_USER",
            "newClusterDriverNodeType": "@linkedService().DriverNodeType",
            "newClusterVersion": "@linkedService().ClusterVersion",
            "newClusterInitScripts": [
              "/Workspace/Ingestion/init_odbc_driver.sh"
            ],
            "newClusterSparkEnvVars": {
              "PYSPARK_PYTHON": "/databricks/python3/bin/python3"
            }
          }
        }
      }
    }
  ]
}

部署

New-AzResourceGroupDeployment -ResourceGroupName "MYDEVRESOURCEGROUP" -TemplateFile "./template.json"

总结

如果未使用

dataSecurityMode
应用
Set-AzDataFactoryV2LinkedService
:

  1. 使用 ADF REST API 获得更好的控制和属性支持。
  2. 通过 ARM 模板部署以实现完全兼容性。
  3. 更新到最新的 Az PowerShell 模块
  4. 手动验证 ADF UI 中的属性。

如果您需要更多详细信息或特定步骤的帮助,请告诉我! 🚀

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