如何查看oozie工作流程中的分区数据集?
how to check partition data sets in oozie work flow?
如何使用决策节点通过 oozie 工作流程检查分区位置是否存在。
示例:/user/cloudera/year=2016/month=201609/day=20150912
在我的 hdfs 位置,我每天都会得到一组数据,例如 above.i.e...year=2016/month=201609/day=20150912
在协调工作的帮助下,我将获得日期值
<property>
<name>today</name>
<value>${coord:formatTime(coord:dateOffset(coord:dateTzOffset(coord:nominalTime(), "America/Los_Angeles"), -1, 'DAY'), 'yyyyMMdd')}</value>
</property>
在决策节点的帮助下,在我的工作流程中,如何检查 year=2016/month=201609/day=20150912
路径是否存在?
您可以使用 oozie 工作流 EL 函数中的 HCatalog EL Functions:
指定 hcatalog table 分区 URI 的格式是
hcat://[metastore server]:[port]/[database name]/[table name]/[partkey1]=[value];[partkey2]=[value].
例如:
hcat://foo:8020/mydb/mytable/region=us;dt=20121212
这似乎是您要检查的位置:
/user/cloudera/year=${YEAR}/month=${YEAR}${MONTH}/day=${YEAR}${MONTH}${DAY}
当然,您会在需要时使用正确的偏移量来更正这些。
感谢@YoungHobbit 和@Dennis Jaheruddin 的及时回复。
我想使用决策节点来检查路径是否存在而不是 URI。
我发现协调工作和 workflow.xml 帮助我实现了解决方案。
coordinate_job.xml
<coordinator-app name="testemailjob" frequency="15" start="${jobStart}" end="${jobEnd}" timezone="America/Los_Angeles" xmlns="uri:oozie:coordinator:0.2" >
<controls>
<execution>FIFO</execution>
</controls>
<action>
<workflow>
<app-path>${test}</app-path>
<configuration>
<property>
<name>year</name>
<value>${coord:formatTime(coord:dateOffset(coord:dateTzOffset(coord:nominalTime(), "America/Los_Angeles"), -1, 'DAY'), 'yyyy')}</value>
</property>
<property>
<name>month</name>
<value>${coord:formatTime(coord:dateOffset(coord:dateTzOffset(coord:nominalTime(), "America/Los_Angeles"), -1, 'DAY'), 'yyyyMM')}</value>
</property>
<property>
<name>yesterday</name>
<value>${coord:formatTime(coord:dateOffset(coord:dateTzOffset(coord:nominalTime(), "America/Los_Angeles"), -1, 'DAY'), 'yyyyMMdd')}</value>
</property>
<property>
<name>today</name>
<value>${coord:formatTime(coord:dateTzOffset(coord:nominalTime(), "America/Los_Angeles"), 'yyyyMMdd')}</value>
</property>
<property>
<name>oozie.use.system.libpath</name>
<value>True</value>
</property>
</configuration>
</workflow>
</action>
</coordinator-app>
我的workflow.xml:
<workflow-app name= ......>
...........................
...............................
<decision name="CheckFile">
<switch>
<case to="nextOozieTask">
${fs:exists(concat(concat(concat(concat(concat(concat(nameNode, path),year),"/month="),month),"/day="),today))}
</case>
<case to="nextOozieTask1">
${fs:exists(concat(concat(concat(concat(concat(concat(nameNode, path),year),'/month='),month),'/day='),yesterday))}
</case>
<default to="MailActionFileMissing" />
</switch>
</decision>
....................
......................
</workflow-app>
如何使用决策节点通过 oozie 工作流程检查分区位置是否存在。
示例:/user/cloudera/year=2016/month=201609/day=20150912
在我的 hdfs 位置,我每天都会得到一组数据,例如 above.i.e...year=2016/month=201609/day=20150912
在协调工作的帮助下,我将获得日期值
<property>
<name>today</name>
<value>${coord:formatTime(coord:dateOffset(coord:dateTzOffset(coord:nominalTime(), "America/Los_Angeles"), -1, 'DAY'), 'yyyyMMdd')}</value>
</property>
在决策节点的帮助下,在我的工作流程中,如何检查 year=2016/month=201609/day=20150912
路径是否存在?
您可以使用 oozie 工作流 EL 函数中的 HCatalog EL Functions:
指定 hcatalog table 分区 URI 的格式是
hcat://[metastore server]:[port]/[database name]/[table name]/[partkey1]=[value];[partkey2]=[value].
例如:
hcat://foo:8020/mydb/mytable/region=us;dt=20121212
这似乎是您要检查的位置:
/user/cloudera/year=${YEAR}/month=${YEAR}${MONTH}/day=${YEAR}${MONTH}${DAY}
当然,您会在需要时使用正确的偏移量来更正这些。
感谢@YoungHobbit 和@Dennis Jaheruddin 的及时回复。
我想使用决策节点来检查路径是否存在而不是 URI。 我发现协调工作和 workflow.xml 帮助我实现了解决方案。
coordinate_job.xml
<coordinator-app name="testemailjob" frequency="15" start="${jobStart}" end="${jobEnd}" timezone="America/Los_Angeles" xmlns="uri:oozie:coordinator:0.2" >
<controls>
<execution>FIFO</execution>
</controls>
<action>
<workflow>
<app-path>${test}</app-path>
<configuration>
<property>
<name>year</name>
<value>${coord:formatTime(coord:dateOffset(coord:dateTzOffset(coord:nominalTime(), "America/Los_Angeles"), -1, 'DAY'), 'yyyy')}</value>
</property>
<property>
<name>month</name>
<value>${coord:formatTime(coord:dateOffset(coord:dateTzOffset(coord:nominalTime(), "America/Los_Angeles"), -1, 'DAY'), 'yyyyMM')}</value>
</property>
<property>
<name>yesterday</name>
<value>${coord:formatTime(coord:dateOffset(coord:dateTzOffset(coord:nominalTime(), "America/Los_Angeles"), -1, 'DAY'), 'yyyyMMdd')}</value>
</property>
<property>
<name>today</name>
<value>${coord:formatTime(coord:dateTzOffset(coord:nominalTime(), "America/Los_Angeles"), 'yyyyMMdd')}</value>
</property>
<property>
<name>oozie.use.system.libpath</name>
<value>True</value>
</property>
</configuration>
</workflow>
</action>
</coordinator-app>
我的workflow.xml:
<workflow-app name= ......>
...........................
...............................
<decision name="CheckFile">
<switch>
<case to="nextOozieTask">
${fs:exists(concat(concat(concat(concat(concat(concat(nameNode, path),year),"/month="),month),"/day="),today))}
</case>
<case to="nextOozieTask1">
${fs:exists(concat(concat(concat(concat(concat(concat(nameNode, path),year),'/month='),month),'/day='),yesterday))}
</case>
<default to="MailActionFileMissing" />
</switch>
</decision>
....................
......................
</workflow-app>