我们有一个Hadoop服务,我们有多个应用程序。我们需要通过重新执行相同的工作流程来处理每个应用程序的数据。这些计划在一天的同一时间执行。问题是当这些作业运行时,很难知道作业正在运行/失败/成功的应用程序。当然,我可以打开工作配置并知道它,但这确实需要时间,因为有10个应用程序在该服务下运行。
oozie中是否有任何选项可以在执行作业时动态传递工作流程的名称(或部分工作),例如
oozie job -run -config <filename> -name "<NameIWishToGive>"
OR
oozie job -run -config <filename> -nameSuffix "<MyApplicationNameUnderTheService>"
另外,我们不希望创建多个作业文件夹来单独执行,因为复制粘贴太多了。
请建议。
答案 0 :(得分:4)
在我看来,您应该只能使用作业配置中设置的属性。
通过执行以下操作,我能够获得动态名称。
以下是我的workflow.xml的一个示例:
<workflow-app xmlns="uri:oozie:workflow:0.2" name="map-reduce-wf-${environment}">
...
</workflow-app>
在我的职业生涯中,我有:
...
environment=test
...
该名称最终成为:“map-reduce-wf-test”
答案 1 :(得分:1)
你会在apache文档中找到一大堆oozie命令行here。我不确定你正在寻找哪一个,所以我想我只是粘贴链接。希望这有帮助!
答案 2 :(得分: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文件的文件夹。
workflow.xml:
<workflow-app name="#{appName}" xmlns="uri:oozie:workflow:0.3">
...
</workflow-app>
coordinator.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)}
...
希望这有帮助。