gpt4 book ai didi

hadoop - 外部客户端如何通过 HTTP 回调通知 Oozie 工作流

转载 作者:可可西里 更新时间:2023-11-01 14:34:10 27 4
gpt4 key购买 nike

假设我们有一个 Oozie 工作流以 3 个 Java 操作节点启动的情况。每个 Java 操作都会对 Oozie/Hadoop 集群之外的外部 Web 服务(例如 google.com、yahoo.com 等公开的某些 Web 服务)进行异步 HTTP 调用。我认为这是可行的,因为 Oozie 支持自定义操作节点。

现在,我不想让 Oozie 不时轮询外部 Web 服务来检查工作是否在外部 Web 服务中完成。我想让外部 Web 服务(让我们假设我们可以自由修改)回调 Oozie 以通知 Oozie 外部 Web 服务的工作已完成,并进一步将一些信息传递回 Oozie,让 Oozie 决定后续操作采取。

有维基,比如这个http://www.infoq.com/articles/ExtendingOozie ,谈论从异步节点的操作回调,但是我从来没有找到任何实际示例异步操作节点的回调是如何工作的。有谁知道异步操作节点的回调是如何工作的?

非常感谢!

最佳答案

看看 Oozie SSH action implementation .它只是一个类,比较简单(但有点乱),并展示了如何创建回调 URL:

String callbackPost = ignoreOutput ? "_" : 
getOozieConf().get(HTTP_COMMAND_OPTIONS).replace(" ", "%%%");

String callBackUrl = Services.get().get(CallbackService.class)
.createCallBackUrl(action.getId(), EXT_STATUS_VAR);

然后 URL 作为参数传递给 shell 脚本。该脚本稍后仅对该 URL 调用 curl。外部状态 ID 例如是通过回调返回给 Oozie 的已执行进程的 PID。它不能为空/null。

如果您决定深入研究代码,提示:虽然代码看起来是同步执行的,但实际上是通过在后台运行 shell 脚本的方式异步执行的。

回调由Oozie的CallbackServlet处理:

dagEngine.processCallback(actionId, callbackService.getExternalStatus(queryString), props);

关于hadoop - 外部客户端如何通过 HTTP 回调通知 Oozie 工作流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20671386/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com