如何在oozie工作流中检查分区数据集?

2jcobegt  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(374)

如何使用决策节点检查oozie工作流中的分区位置是否存在。示例:/user/cloudera/ year=2016/month=201609/day=20150912 在我的hdfs的位置,我会得到一个数据集,每天像上面。即。。。 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 路径是否存在?

s4n0splo

s4n0splo1#

您可以使用oozie工作流el函数中的hcatalog el函数:
指定hcatalog表分区uri的格式为

hcat://[metastore server]:[port]/[database name]/[table name]/[partkey1]=[value];[partkey2]=[value].

例如:

hcat://foo:8020/mydb/mytable/region=us;dt=20121212
jdzmm42g

jdzmm42g2#

感谢您及时回复@younghobbit和@dennis jaheruddin。
我想使用decision节点来检查路径是否存在,而不是uri。我发现coordinate job和workflow.xml帮助我实现了解决方案。
坐标\u 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>

我的工作流.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>
jtjikinw

jtjikinw3#

似乎这是您要检查的位置:

/user/cloudera/year=${YEAR}/month=${YEAR}${MONTH}/day=${YEAR}${MONTH}${DAY}

当然,您可以在需要时用正确的偏移量来纠正这些问题。

相关问题