Oozie почасовой координатор рассчитывает на будущие действия

На 5-минутной отметке каждого часа у меня есть данные за прошедший час, загруженные в hdfs. Я думал, что смогу настроить задание координатора на 10-минутную отметку каждого часа, чтобы обрабатывать эти данные, проверяя, существует ли каталог для этого часа. То, что в итоге происходит, - это то, что координатор будет нормально работать с данными за прошлый час во время представления, продолжит работать нормально в течение следующих 2 часов, а затем будущие действия перейдут от "ожидания" к "тайм-ауту". Я предполагаю, что по умолчанию есть максимальный предел для того, как долго действие может оставаться в "ожидании". Кажется, немного нелогичным, если ограничение времени ожидания применяется ко всем действиям в абсолютном будущем времени. Во всяком случае, вот пример файла координатора.xml. Я ищу какие-либо предложения о том, как создать его таким образом, который имеет больше смысла, или о том, как увеличить время ожидания по умолчанию.

<datasets>
    <dataset name="hourly_cl" frequency="${coord:hours(1)}" initial-instance="2016-02-08T11:10Z" timezone="PST">
        <uri-template>hdfs://user/tzl/warehouse/incoming/logmessages.log.${YEAR}${MONTH}${DAY}/${HOUR}/</uri-template>
        <done-flag></done-flag>
    </dataset>
    <dataset name="hourly_cl_out" frequency="${coord:hours(1)}" initial-instance="2016-02-05T11:10Z" timezone="PST">
        <uri-template>hdfs://user/tzl/warehouse/output/logmessages.log.${YEAR}${MONTH}${DAY}/${HOUR}/</uri-template>
        <done-flag></done-flag>
    </dataset>
</datasets>

<input-events>
    <data-in name="coordInput1" dataset="hourly_cl">
        <instance>${coord:current(-1)}</instance>
    </data-in>
</input-events>
<output-events>
    <data-out name="clout" dataset="hourly_cl_out">
        <instance>${coord:current(-1)}</instance>
    </data-out>
</output-events>

<action>
    <workflow>
        <app-path>${appPath}</app-path>
    <configuration>
        <property>
            <name>inputPath</name>
            <value>${coord:dataIn('coordInput1')}</value>
        </property>
        <property>
            <name>outputPath</name>
        <value>${coord:dataOut('clout')}</value>
        </property>
    </configuration>
    </workflow>
</action>

Также заметил при просмотре журналов, что oozie проверяет КАЖДУЮ МИНУТУ для каждого каталога данных. Другими словами, в 18:01 он проверит эти существующие logmessages.log.20160208 / 18

logmessages.log.20160208 / 19

logmessages.log.20160208 / 20

logmessages.log.20160208 / 21

...

и в 18:02 снова проверит logmessages.log.20160208 / 18

logmessages.log.20160208 / 19

logmessages.log.20160208 / 20

logmessages.log.20160208 / 21

...

Это, вероятно, занимает ненужные циклы процессора. Я предположил, установив частоту на час, это было бы достаточно разумно, чтобы не тратить время на проверку будущих наборов данных, когда я определил экземпляр как данные за прошлый час: current(-1)

1 ответ

Решение

Я решил эту проблему с простой настройкой свойств. Представляя это под координатором-приложением

<coordinator-app name="cl_test" frequency="${coord:hours(1)}" start="..."   end="..." timezone="PST" xmlns="uri:oozie:coordinator:0.2">
    <controls>
        <timeout>1440</timeout>
        <concurrency>2</concurrency>
        <throttle>1</throttle>
    </controls>
...
...
</coordinator-app>

В частности, <throttle> свойство ограничивает количество действий, которые можно перевести в состояние ожидания. Таким образом, установив его на 1, время ожидания применяется только к следующему действию, которое находится в состоянии "ожидания". <timeout> также изменяет лимит времени ожидания действий, хотя я считаю, <concurrency> ограничивает количество действий, которые могут быть запущены одновременно.

Другие вопросы по тегам