带有存档操作的 Oozie 工作流
Oozie Workflow with Archive Action
我想制作一个 oozie 工作流程,其中成功的最后一步是 "Archive" 结果。
shell中的命令是
hadoop archive -archiveName=XXX.har -p /some/random/parent directorToArhive pathToArchiveDestination
我试过以下方法
<workflow-app name="HARD_CODED_ARCHIVE_TEST" xmlns="uri:oozie:workflow:0.4">
<start to="archive"/>
<action name="archive">
<archive archiveName="xxx.har" src="/root/src/dir" dest="/path/to/desired/archive/location"/>
<ok to="end"/>
<error to="kill"/>
</action>
<kill name="kill">
<message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end"/>
</workflow-app>
我得到的错误如下所示:
WARNING: Exception in Runloop of thread: main with message: E0701: XML schema error, cvc-complex-type.2.4.a: Invalid content was found starting with element 'archive'. One of '{"uri:oozie:workflow:0.4":map-reduce, "uri:oozie:workflow:0.4":pig, "uri:oozie:workflow:0.4":sub-workflow, "uri:oozie:workflow:0.4":fs, "uri:oozie:workflow:0.4":java, WC[##other:"uri:oozie:workflow:0.4"]}' is expected.
所以很明显我不能这样做。因为 oozie 工作流架构不支持 "archive" 操作。
我真的不想 运行 通过 cron 执行此操作,因为我想在工作流成功完成后立即存档我该怎么做。
试试这个:
<action name="archive">
<java>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<main-class>org.apache.hadoop.tools.HadoopArchives</main-class>
<arg>-archiveName</arg>
<arg>${YourArchiveName}.har</arg>
<arg>-p</arg>
<arg>${FilesParentDirectory}</arg>
<arg>${SrcDirectory}</arg>
<arg>${DestDirectory}</arg>
</java>
<ok to="end"/>
<error to="error"/>
</action>
您所需要的只是工作流中的 hadoop-archives.jar 文件。也不要忘记将 jar 放在您的工作流程目录中,您应该可以开始了。希望对您有所帮助!
我想制作一个 oozie 工作流程,其中成功的最后一步是 "Archive" 结果。
shell中的命令是
hadoop archive -archiveName=XXX.har -p /some/random/parent directorToArhive pathToArchiveDestination
我试过以下方法
<workflow-app name="HARD_CODED_ARCHIVE_TEST" xmlns="uri:oozie:workflow:0.4">
<start to="archive"/>
<action name="archive">
<archive archiveName="xxx.har" src="/root/src/dir" dest="/path/to/desired/archive/location"/>
<ok to="end"/>
<error to="kill"/>
</action>
<kill name="kill">
<message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end"/>
</workflow-app>
我得到的错误如下所示:
WARNING: Exception in Runloop of thread: main with message: E0701: XML schema error, cvc-complex-type.2.4.a: Invalid content was found starting with element 'archive'. One of '{"uri:oozie:workflow:0.4":map-reduce, "uri:oozie:workflow:0.4":pig, "uri:oozie:workflow:0.4":sub-workflow, "uri:oozie:workflow:0.4":fs, "uri:oozie:workflow:0.4":java, WC[##other:"uri:oozie:workflow:0.4"]}' is expected.
所以很明显我不能这样做。因为 oozie 工作流架构不支持 "archive" 操作。
我真的不想 运行 通过 cron 执行此操作,因为我想在工作流成功完成后立即存档我该怎么做。
试试这个:
<action name="archive">
<java>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<main-class>org.apache.hadoop.tools.HadoopArchives</main-class>
<arg>-archiveName</arg>
<arg>${YourArchiveName}.har</arg>
<arg>-p</arg>
<arg>${FilesParentDirectory}</arg>
<arg>${SrcDirectory}</arg>
<arg>${DestDirectory}</arg>
</java>
<ok to="end"/>
<error to="error"/>
</action>
您所需要的只是工作流中的 hadoop-archives.jar 文件。也不要忘记将 jar 放在您的工作流程目录中,您应该可以开始了。希望对您有所帮助!