如何在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
相关产品推荐
相关产品推荐

