根据oozie中的日期创建输出文件

时间:2012-02-24 20:26:10

标签: date hadoop file-io oozie

我正在使用oozie来运行我的map-reduce作业。我想根据日期创建输出文件。但它将日期作为字符串并最终打印而不是将日期作为值:

   /user/skataria/geooutput/$(date +"%m%d%Y%H%M%S")

这是oozie属性文件:

nameNode=hdfs://localhost:8020
jobTracker=localhost:8021
date=(date +"%m%d%Y%H%M%S")
oozie.wf.application.path=${nameNode}/services/advert/sid
inputDir=${nameNode}/user/${user.name}/geoinput/testgeo
outputDir=${nameNode}/user/${user.name}/geooutput/${date}

不知怎的,我不能将oozie作为标签,因为我的声誉低于1500

2 个答案:

答案 0 :(得分:3)

看起来你正试图在java属性文件中使用linux shell命令(date +"%m%d%Y%H%M%S") - 这不会解决。

一个解决方法,假设这是手动提交的工作流作业(而不是协调器作业)的一部分,是使用-D key = value选项从命令行提供date属性,并使用linux shell返回引号解析内联命令的输出

oozie job -run -config job.properties -D date=`date +"%m%d%Y%H%M%S"`

您需要确保您的Oozie版本支持-D key = value选项

答案 1 :(得分:0)

是的我同意shell选项有效。但这并没有解决我的用例。我想每天运行我的map-reduce工作,并通过Hue安排。输出目录需要作为Oozie的作业属性进行参数化。

顺便说一句,我发现Oozie has Expression language Functions

不幸的是,函数timestamp()以W3C格式将UTC当前日期和时间返回到第二个(YYYY-MM-DDThh:mm:ss.sZ)。即:1997-07-16T19:20:30.45Z并且完全无法用于在HDFS中创建子目录名称

所以现在,

我有一个解决方法。我正在使用Workflow EL函数wf:id()workflow.xml

<property>
  <name>mapreduce.output.fileoutputformat.outputdir</name>
  <value>/user/sasubramanian/impressions/output/outpdir/${yyyy_mm_dd}/${wf:id()}</value>
</property>

这将创建一个输出目录,其子目录为

/user/foouser/subdir1/output/outpdir/0000006-130321100837625-oozie-oozi-W

注意:您必须在workflow.xml中指定它。如果您在job.properties

中指定它,则无效