根据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
解决方案
它看起来你在Java属性文件中尝试使用Linux shell命令(date +"%m%d%Y%H%M%S"
) - 这不会解决。
一个问题,假设这是手动提交的工作流作业的一部分(与协调器作业相反)是使用-d key= value选项提供从命令行的日期属性,以及linux shell返回引用解决内联的命令的输出
oozie job -run -config job.properties -D date=`date +"%m%d%Y%H%M%S"`
.
您需要确保您的oozie版本支持-d键=值选项
其他提示
是的,我同意 shell 选项有效。但这并不能解决我的用例。我想每天运行我的地图缩减作业并通过 Hue 安排它。输出目录需要参数化为 Oozie 的作业属性。
顺便说一句我发现 Oozie 具有表达式语言函数,
不幸的是这个功能 timestamp()
以 W3C 格式返回 UTC 当前日期和时间,精确到秒 (YYYY-MM-DDThh:mm:ss.sZ)
. 。IE。: 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 中指定它,这将不起作用
不隶属于 StackOverflow