5

我们有一个 Hadoop 服务,其中有多个应用程序。我们需要通过重新执行相同的工作流来处理每个应用程序的数据。这些计划在一天中的同一时间执行。问题是,当这些作业正在运行时,很难知道该作业正在运行/失败/成功的应用程序。当然,我可以打开作业配置并知道它,但这确实需要时间,因为有 10 多个应用程序在该服务下运行。

oozie 中是否有任何选项可以在执行作业时动态传递工作流(或其一部分)的名称,例如

oozie job -run -config <filename> -name "<NameIWishToGive>"
OR
oozie job -run -config <filename> -nameSuffix "<MyApplicationNameUnderTheService>"

此外,我们不希望创建多个作业文件夹分别执行,因为这将是太多的复制粘贴。

请建议。

4

4 回答 4

4

在我看来,您应该能够只使用作业配置中设置的属性。

通过执行以下操作,我能够获得动态名称。

这是我的 workflow.xml 的示例:

<workflow-app xmlns="uri:oozie:workflow:0.2" name="map-reduce-wf-${environment}">
...
</workflow-app>

在我的 job.properties 中,我有:

...
environment=test
...

这个名字最终是:“map-reduce-wf-test”

于 2013-10-10T21:05:15.330 回答
1

您会在 apache 文档中找到一大堆 oozie 命令行我不确定您到底在寻找哪一个,所以我想我只是粘贴链接。希望这可以帮助!

于 2013-01-28T15:37:23.097 回答
0

我在 oozie 中找不到任何东西可以做到这一点。这是在 *.xml 文件中查找/替换 #{appName} 和 #{frequency} + 将所有文件上传到 hdfs 的脚本。值取自作为第三个参数传递给脚本的属性文件。

要点 - https://gist.github.com/epishkin/5952522

例子:

./upload.sh simple_reports namenode01 simple_reports/coordinator_script-1.properties

其中 'simple_reports' 是一个包含 workflow.xml 和 coordinator.xml 文件的文件夹。

工作流.xml:

<workflow-app name="#{appName}" xmlns="uri:oozie:workflow:0.3">
...
</workflow-app>

协调器.xml:

<coordinator-app name="#{appName}-coord" xmlns="uri:oozie:coordinator:0.2"

             frequency="#{frequency}"
             start="${start}"
             end=  "${end}"

             timezone="America/New_York">
...
</coordinator-app>

coordinator_script-1.properties:

appName=multi_network
frequency=${coord:days(7)}
...

希望这可以帮助。

于 2013-07-09T14:39:20.637 回答
0

我最近遇到了这个问题,所有表都使用相同的工作流程,但 oozie 应用程序的名称应该反映它正在处理的表的名称。

然后从 job.properties 传递相同的参数,然后 ozzie 应用程序的名称将与 dataload_tablename 一致。

于 2017-05-05T22:00:22.830 回答