0

Как проверить расположение раздела существует или нет с рабочим потоком oozie с использованием узла решения. пример:/пользователь/Cloudera/year=2016/month=201609/day=20150912как проверить данные наборы данных в рабочем потоке oozie?

в моем HDFS месте я получу один набор данных, каждый день, как above.ie .. 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 путь существует или нет?

ответ

0

Благодарим вас за быстрый ответ @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> 
0

Вы можете использовать HCatalog EL Functions из oozie документооборота EL функций:

Формат, чтобы указать раздел hcatalog таблицы URI является

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

Например:

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

Похоже это место, которое вы хотели бы проверить:

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

Конечно, вы должны исправить их с правильным смещением, если требуется.