1

我正在使用 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

4

2 回答 2

3

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

一种解决方法,假设这是手动提交的 Workflow 作业(而不是 Coordinator 作业)的一部分,是使用 -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 选项

于 2012-03-21T01:05:02.307 回答
0

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

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

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

所以现在,

我有一个解决方法。我正在使用工作流 ELwf: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 中指定它,这将不起作用

于 2013-03-21T17:24:24.840 回答