You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Data Factory中配置带脚本动作的HDInsightOnDemand链接服务及依赖安装替代方案

我来帮你解决这两个关于Data Factory和HDInsight On-Demand的问题,都是实际工作中常碰到的场景:

1. 如何在Data Factory中创建带有脚本动作的HDInsightOnDemand链接服务?

你可以通过Data Factory Studio的可视化界面,或者ARM模板/CLI来完成这个操作:

通过UI创建的步骤:

  • 打开Data Factory Studio,左侧导航栏选择「管理」→「链接服务」→「新建」
  • 在搜索框输入「HDInsight On-Demand」,选中后点击「继续」
  • 填写基础配置:链接服务名称、Azure订阅、资源组、集群类型(选Spark)、HDInsight版本、节点大小及数量等
  • 切换到高级选项卡,在这个页面里就能找到「脚本动作」的配置区域
  • 点击「添加脚本动作」,填写以下信息:
    • 脚本名称:自定义一个易识别的名称(比如「InstallPythonDeps」)
    • 脚本URI:指向存储在Azure Blob Storage里的bash脚本(比如https://yourstorage.blob.core.windows.net/scripts/install-packages.sh)
    • 参数:如果脚本需要参数的话填写,没有就留空
    • 角色:选择要运行脚本的节点类型(头节点/工作节点,按需选择)
  • 完成存储账户、凭据等其他配置后,点击「创建」即可

通过ARM模板创建(适合自动化部署):

如果需要批量部署或者版本控制,可以用ARM模板定义链接服务,在typeProperties中添加scriptActions数组:

{
  "name": "HDInsightOnDemandLinkedService",
  "type": "Microsoft.DataFactory/factories/linkedservices",
  "properties": {
    "type": "HDInsightOnDemand",
    "typeProperties": {
      "clusterSize": 4,
      "clusterType": "Spark",
      "version": "3.1",
      "osType": "Linux",
      "scriptActions": [
        {
          "name": "InstallPythonPackages",
          "uri": "https://yourstorage.blob.core.windows.net/scripts/install-packages.sh",
          "parameters": "",
          "roles": ["HeadNode", "WorkerNode"]
        }
      ],
      // 其他配置:存储账户、凭据、区域等
    }
  }
}
2. 找不到脚本动作选项时,自动化安装HDInsightOnDemand依赖包的替代方案

如果在UI里确实找不到脚本动作的配置项(可能是界面更新或区域版本差异导致),可以试试这几个替代方案:

方案一:在PySpark作业脚本中直接安装依赖

这是最快捷的方式,不需要修改集群配置,直接在你的PySpark代码开头加入安装命令:

import subprocess
# 安装numpy,--user参数确保安装到当前用户目录,避免权限问题
subprocess.run(["pip", "install", "numpy", "--user"], check=True)

# 之后就可以正常导入使用
import numpy as np

如果依赖包较大,可以提前把包文件上传到Azure Blob Storage,用--find-links指定本地源加速安装:

subprocess.run(
    ["pip", "install", "--user", "--find-links", "https://yourstorage.blob.core.windows.net/packages/", "numpy"],
    check=True
)

注意:这种方式每次作业运行都会执行安装,适合依赖包不多的场景,若依赖较多会增加作业启动时间。

方案二:用ARM模板/CLI创建链接服务

绕开UI限制,直接用ARM模板(参考第一个问题里的模板示例)定义包含脚本动作的链接服务,然后通过Azure Portal部署模板,或者用Azure PowerShell/CLI命令创建:
比如用PowerShell命令:

Set-AzDataFactoryV2LinkedService -ResourceGroupName "your-rg" -DataFactoryName "your-adf" -Name "HDInsightOnDemandLS" -DefinitionFile ".\linked-service.json"

方案三:使用自定义HDInsight镜像

如果你的作业长期依赖这些包,可以创建一个预装了numpy等依赖的HDInsight自定义镜像,然后在On-Demand链接服务的配置中指定使用该镜像。这种方式一劳永逸,适合稳定运行的生产作业,但需要提前完成镜像的制作和上传工作。


内容的提问来源于stack exchange,提问作者Raphael Ottoni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:00:41