如何使用REST API runDSJob并行运行更多实例作业?
如何通过runDSJob REST API并行运行DataStage多实例作业?
问题背景
尝试通过runDSJob REST API启动DataStage多实例作业时,直接在jobName后拼接.instance的方式调用会失败,API无法识别该格式的作业名称;但不带实例标识的调用可以正常运行作业,需要找到正确的并行多实例启动方法。
错误调用示例
带实例标识的错误API请求:
https://xx.xx.xx.x:9443/ibm/iis/api/dscdesignerapi?api=runDSJob&jobName=JobName.instance&projectName=ProjectName&hostName=Host.Name&getFullOutput=true&apiVersion=3.0
返回失败响应:
{ "JobStatus": "FWF", "dataflowName": "JobName.instance", "restApiName": "restRunDSJob", "failureMessage": [ { "errorStackTrace": "", "errorException": "JobGetInfoException", "errorMessage": "Failed to get \"any field\" from the job \"JobName.instance\" information." } ], "succeeded": false }
正常调用示例
不带实例标识的成功API请求:
https://xx.xx.xx.x:9443/ibm/iis/api/dscdesignerapi?api=runDSJob&jobName=JobName&projectName=ProjectName&hostName=Host.Name&getFullOutput=true&apiVersion=3.0
返回成功响应:
{ "result": "oshResult", "JobStatus": "RUN", "dataflowName": "JobName", "restApiName": "restRunDSJob", "succeeded": true }
解决方案
DataStage多实例作业不能通过修改jobName来指定,需要使用API专属参数或传递运行时参数来启动,以下是两种有效方法:
方法1:使用jobInstance参数(推荐)
在API请求中添加jobInstance参数指定实例编号,不同编号对应不同的并行实例:
https://xx.xx.xx.x:9443/ibm/iis/api/dscdesignerapi?api=runDSJob&jobName=JobName&projectName=ProjectName&hostName=Host.Name&getFullOutput=true&apiVersion=3.0&jobInstance=1
将jobInstance=1中的数字替换为2、3等,即可启动多个并行的作业实例。
方法2:通过jobParams传递实例参数
如果API版本不支持jobInstance参数,可以通过jobParams传递DataStage原生的-INSTANCE运行时参数:
https://xx.xx.xx.x:9443/ibm/iis/api/dscdesignerapi?api=runDSJob&jobName=JobName&projectName=ProjectName&hostName=Host.Name&getFullOutput=true&apiVersion=3.0&jobParams=-INSTANCE=1
同样,修改参数后的数字即可启动不同的并行实例。
注意事项
- 确保目标DataStage作业已开启多实例支持:在Designer中打开作业属性,勾选Allow multiple instances选项
- 实例编号需唯一,避免不同实例间的资源冲突
- 若使用
jobInstance参数,需确认API版本(apiVersion=3.0及以上通常支持),可参考IBM官方DataStage REST API文档确认参数兼容性
内容的提问来源于stack exchange,提问作者andrea gnesi
相关产品推荐
相关产品推荐

