我正在使用 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 中指定它,这将不起作用

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top