2012-02-24 81 views
1

我正在使用oozie来运行我的map-reduce作业。我想根据日期创建输出文件。但是这需要时间作为一个字符串结束,而不是采取日期值up打印:在oozie中根据日期创建输出文件

/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以下

回答

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键=值选项

+0

请务必尝试一下。谢谢! – RFT 2012-03-21 14:06:44

0

是的,我同意shell选项作品的输出。但是这并不能解决我的使用问题。我想每天运行我的地图缩减工作,并安排通过色调。输出目录需要参数化为Oozie的作业属性。

通过我找到的方式,Oozie has Expression language Functions

不幸的是timestamp()下返回W3C格式UTC当前日期和时间到第二(YYYY-MM-DDThh:mm:ss.sZ)功能。即:1997-07-16T19:20:30.45Z和完全无法使用在HDFS

创建一个子目录名称

因此,现在

我有一种变通方法。我使用的工作流程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中指定它,这将不起作用。