我正在使用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
答案 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
中指定它,则无效