如何使用 Hive 公开 Hadoop 作业和工作流元数据

How to expose Hadoop job and workflow metadata using Hive

我想做的是使工作流和作业元数据(例如开始日期、结束日期和状态)在配置单元 table 中可用,以供 BI 工具用于可视化目的。我希望能够监控,例如,如果某个工作流程在特定时间失败,成功率,...

为此,我需要访问 Hue 能够在作业浏览器和 Oozie 仪表板中显示的相同数据。例如,我专门为工作流寻找的是名称、提交者、状态、开始和结束时间。我想要这个的原因是,在我看来,这个工具缺乏总体概述和良好的搜索。 这个想法是,一旦我找到这些数据,我将直接 - 或者通过一些处理步骤 - 将它加载到 Hive 中。

我希望得到解答的问题:

  1. 这些数据是存储在HDFS中还是分散在本地数据节点中?
  2. 如果存储在HDFS中。我在哪里可以找到它?如果存储在本地数据节点,Hue如何找到并显示这个?
  3. 假设我可以访问数据。我希望这些数据采用什么格式。这是存储在一般日志文件中还是我可以期待一些结构化数据?

我正在使用 CDH 5.8

如果您想跟踪在 oozie 中安排的作业的状态,您应该使用 oozie RESTful API or JavaAPI。我没有使用 Hue 版本来操作 Oozie,但我猜它仍然在幕后使用 rest api。它为您提供所有必要的信息,您可以创建一些服务来使用这些数据并将其推送到 Hive table.

另一种选择是访问 Oozie 数据库。正如您可能知道的那样,Oozie 在某些 RDBMS(如 MqSql 或 Postgres)中保存了所有关于计划作业的数据。您可以通过某些 JDBC 连接器使用此信息。一个有趣的方法实际上是尝试 link 这些信息作为一组外部 table 直接进入 Hive though JDBCStorageHandler。不确定它是否有效,但值得一试。

如果作业是通过 Oozie 以外的其他方式提交的,我的方法将无济于事。

我们已经通过 Oozie Java API 从 oozie 服务器收集了所有日志,并迭代了协调器信息以获取所需的信息。

你需要思考,你需要检索什么样的信息。

  1. 如果您通过 Bundle 提交了所有作业,那么从 bundle 到协调器然后到工作流以查找信息。
  2. 如果您想获取所有协调员信息,只需调用 api 并提供协调员号码即可获取所需信息。

然后我们将获取的结果加载到一个配置单元中 table 并且可以在其中过滤失败或超时协调器和各种其他参数的结果。

您可以开始查看 Oozie 站点给出的示例:- https://oozie.apache.org/docs/3.2.0-incubating/DG_Examples.html#Java_API_Example]