抱歉,如果这个问题听起来很基础,我是 Hadoop 环境的新手。
我在找什么?
在我的例子中,有计划每天运行的作业,我想每天在 Excel 工作表中导出失败的作业列表。
如何查看工作流作业?
目前我使用 Oozie 网络控制台查看作业,但我没有/看不到导出选项。还, 我无法从 Oozie documentation 中找到此信息.
但是,我发现可以使用如下命令列出作业
$ oozie jobs -oozie http://localhost:8080/oozie -localtime -len 2 -fliter status=RUNNING
我卡在哪里了?
我想过滤给定日期的失败作业,想将其导出为 csv/excel 数据。
最佳答案
@YoungHobbit 指向 that post 是正确的这与这个非常相似;当谈到使用 Oozie CLI(命令行界面)提取在特定日期运行的完整作业列表时,他的回答准确无误。
只是不要忘记指定一个“无限制”的回复,例如-len 999999999
以避免副作用(默认仅显示前 100 个匹配项,如果您运行很多频繁的作业,这可能太低了)。
诀窍是你可以做一个更复杂的过滤器,比如
“startCreatedTime=2016-06-28T00:00Z;endcreatedtime=2016-06-28T10:00Z;status=FAILED”
...但您不能请求失败的作业或已被杀死或已被暂停 (这可能是由于 YARN 或 HDFS 临时中断造成的)或仍在可疑地运行(例如因为子工作流已暂停).
因此,您最好的选择是获取整个列表,然后使用普通的旧 grep
过滤掉所有成功的作业——如另一个答案中所建议的那样。
然后您还需要一个复杂的 sed
或 awk
脚本来将丑陋的 CLI 输出分解为格式正确的 CSV。哎哟!
现在,您有了 Oozie CLI 的替代方案:Oozie REST API(旧 Cloudera 教程 here,Oozie V4.2 引用 here)让您可以使用 查询 Oozie 服务器提供...的任何编程语言
- HTTP 客户端
- 以及一种解析 JSON 消息的方法(如果没有其他可用的,则使用普通的旧正则表达式)
逻辑基本相同——获取所需时间窗口内所有作业的列表,忽略成功的作业,解析其他作业以生成 CSV 记录,转储到 CSV 文件中。
但是您的程序会更健壮,因为它将基于结构化 JSON 输入。
还有一件事:如果您熟悉 Microsoft VBA,您甚至可以使用 Excel 宏以自助方式动态构建报告。无需为中间 CSV 文件而烦恼。
关于hadoop - 导出 Oozie Web 控制台中列出的作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38503520/