在 M/R 脚本中检索映射/归约任务 ID



我有一个在 Map/Reduce 脚本中执行的进程,该脚本创建了一堆引号。

我希望能够将映射/减少任务 ID 添加到报价/估算记录上的字段中。

因此问题...有没有办法从 M/R 脚本本身中访问实际的当前任务 ID。

它看起来像:MAPREDUCETASK_02686f177c0a7667707763070b7c7752500068061c10016f1c470041_dc257c953b420bea6b7

即使任务 ID 不能直接从脚本上下文访问(正如 ehcanadian 已经提到的那样(,它也可以通过从 map/reduce 脚本中触发的计划脚本实例搜索来获取。

例:

const _getCurrentTaskId = () => {
let scriptObj = runtime.getCurrentScript();
let scriptId = scriptObj.id;
let scriptDeploymentId = scriptObj.deploymentId;
let mapReduceTaskSearch = search.create({
type: search.Type.SCHEDULED_SCRIPT_INSTANCE,
filters: [
['status', 'anyof', 'PROCESSING'],
'AND',
['script.scriptid', 'is', scriptId],
'AND',
['scriptdeployment.scriptid', 'is', scriptDeploymentId]
],
columns: [
'taskid'
]
});
let taskId;
mapReduceTaskSearch.run().each(function(result) {
taskId = result.getValue('taskid');
});
return taskId;
}

请注意,如果您拥有更多 SuiteCloud 处理器并并行运行相同的脚本部署,则此解决方案将不起作用(因为它可能会返回其他当前正在运行的脚本部署的任务 ID(。

对于 MR,您可以获取(并设置(脚本 ID 和部署 ID,以及从映射/随机/归约阶段运行的每个任务的 ID。

没有一种方法可以从 M/R 本身中获取当前正在执行的 M/R 的任务 ID,因为它不是通过上下文公开的。但是,如果通过脚本执行 M/R,则可以将该值存储在自定义记录中,以便在执行 M/R 中检索。(检查脚本 ID 和部署 ID。但是,如果您要执行同一脚本的多个M/R,则不会是故障安全的。

最新更新