Oozie在目录中生成一组文件

时间:2015-07-21 02:55:27

标签: hadoop workflow oozie oozie-coordinator

我试图将日志文件摄取到hadoop。

我想使用oozie触发我的摄取任务(用spark编写),并让oozie将文件名传递给我的任务。

我希望将日志文件设置为:

/example/${YEAR}-${MONTH}-${DAY}-${HOUR}:${MINUTE}/Log1/Log1.log
/example/${YEAR}-${MONTH}-${DAY}-${HOUR}:${MINUTE}/Log1/Log1.1.log
/example/${YEAR}-${MONTH}-${DAY}-${HOUR}:${MINUTE}/Log1/Log1.2.log
/example/${YEAR}-${MONTH}-${DAY}-${HOUR}:${MINUTE}/Log2/Log2.log
/example/${YEAR}-${MONTH}-${DAY}-${HOUR}:${MINUTE}/Log2/Log2.1.log
/example/${YEAR}-${MONTH}-${DAY}-${HOUR}:${MINUTE}/Log2/Log2.2.log

(等)。

所以,现在我有两个问题: 1.如何让oozie生成/ example / $ {YEAR}下的所有文件名 - $ {MONTH} - $ {DAY} - $ {HOUR}:$ {MINUTE} / Log1 /并将其传递给我的应用程序;和

  1. 如何让oozie并行生成/ example / $ {YEAR}下的所有文件名 - $ {MONTH} - $ {DAY} - $ {HOUR}:$ {MINUTE} / Log2 /并将其传递给第二次调用我的任务。

1 个答案:

答案 0 :(得分:0)

DateTime wise文件名创建可以使用小型Java程序完成,可以从Oozie Workflow.xml调用, 像

这样的东西
String processedDateString = (new SimpleDateFormat("yyyyMMddhhmmss")).format(new Date(timeInMilis));

并在工作流程中调用相同的jar

      <main-class>NameFile.jar</main-class>
      <arg>Path=${output_path}</arg>
      <arg>Name=${name}</arg>
      <arg>processedDate=${(wf:actionData('Rename')['ProcessedDate'])}</arg>

对于复制/移动,您可以将同一Java程序与复制操作一起使用。

对于log1和log2位置,您可以在job.properties

中提及