4

Ooize コーディネーターを作成しようとしています。問題は、oozie を使用して処理を待機しているステージング データが既にあることです。

そんな状況を想像してみてください。

  1. 現在の日付: 01.03.2013 (2013 年 3 月 1 日)

  2. 私はこれらの入力カタログを持っています:

    /staging/landing/source/xvlr/2013/02/01/00 (2013 年 2 月初旬、1 日の最初の 1 時間) /staging/landing/source/xvlr/2013/02/01/01

    /ステージング/着陸/ソース/xvlr/2013/02/01/02

    /ステージング/着陸/ソース/xvlr/2013/02/01/03

    /ステージング/着陸/ソース/xvlr/2013/02/01/04

    ....

    /ステージング/着陸/ソース/xvlr/2013/02/28/00

    ...

    /ステージング/着陸/ソース/xvlr/2013/02/28/23

Oozie コーディネーターが、以前に作成されたすべての着陸データを消費し、次のような出力を生成するようにします。

/masterdata/source/xvlr/2013/02/01/00 
/masterdata/source/xvlr/2013/02/01/01
/masterdata/source/xvlr/2013/02/01/02
/masterdata/source/xvlr/2013/02/01/03
/masterdata/source/xvlr/2013/02/01/04
....
/masterdata/source/xvlr/2013/02/28/00
...
/masterdata/source/xvlr/2013/02/28/23

次に、コーディネーターを 1 時間ごとに実行して、マスターデータの新しい出力を生成します。

コーディネーター仕様を使用してどのように行うことができますか? こちらが私のコーディネーターです。それは何もしません。必要な時間に到達してから待機します。それは仕事を始めません。

ご意見をお聞かせください。

<coordinator-app name="Xvlr-parser-coordinator" frequency="60"
                 start="2013-03-07T05:35Z" end="2113-01-01T00:35Z" timezone="Europe/Moscow"  xmlns="uri:oozie:coordinator:0.3">
    <controls>
        <timeout>5</timeout>
        <concurrency>4</concurrency>
    </controls>

    <datasets>
        <dataset name="xvlrInputDataset" frequency="${coord:hours(1)}" initial-instance="2013-03-07T05:35Z" timezone="Europe/Moscow">
            <uri-template>${nameNode}/staging/landing/source/xvlr/${YEAR}/${MONTH}/${DAY}/${HOUR}</uri-template>
            <done-flag></done-flag>
        </dataset>
        <dataset name="xvlrOutputDataset" frequency="${coord:hours(1)}" initial-instance="2013-03-07T05:35Z" timezone="Europe/Moscow">
            <uri-template>${nameNode}/masterdata/source/xvlr/archive/${YEAR}/${MONTH}/${DAY}/${HOUR}</uri-template>
            <done-flag></done-flag>
        </dataset>

    </datasets>

    <input-events>
        <data-in name="xvlrInputEvent" dataset="xvlrInputDataset">
            <instance>${coord:current(0)}</instance>
        </data-in>
    </input-events>

    <output-events>
        <data-out name="xvlrOutputEvent" dataset="xvlrOutputDataset">
            <instance>${coord:current(0)}</instance>
        </data-out>
    </output-events>
    <action>
        <workflow>
            <app-path>${oozieAppHomeCatalog}/sub-workflows/Xvlr-parser-subworkflow.xml</app-path>
            <configuration>
                <property>
                    <name>inputDir</name>
                    <value>${coord:dataIn('xvlrInputEvent')}</value>
                </property>
                <property>
                    <name>outputDir</name>
                    <value>${coord:dataOut('xvlrOutputEvent')}</value>
                </property>

            </configuration>

        </workflow>
    </action>
</coordinator-app>
4

1 に答える 1

4

これが正しい解決策です(数日間機能します:)))):

<coordinator-app name="Xvlr-parser-coordinator" frequency="60"
                 start="2013-03-07T16:35Z" end="2113-01-01T00:35Z" timezone="Europe/Moscow"  xmlns="uri:oozie:coordinator:0.3">
    <controls>
        <timeout>3</timeout>
        <concurrency>1</concurrency>
    </controls>

    <datasets>
        <dataset name="xvlrInputDataset" frequency="${coord:hours(1)}" initial-instance="2013-03-07T16:35Z" timezone="Europe/Moscow">
            <uri-template>${nameNode}/staging/landing/source/xvlr/${YEAR}/${MONTH}/${DAY}/${HOUR}</uri-template>
            <done-flag></done-flag>
        </dataset>
        <dataset name="xvlrOutputDataset" frequency="${coord:hours(1)}" initial-instance="2013-03-07T16:35Z" timezone="Europe/Moscow">
            <uri-template>${nameNode}/masterdata/source/xvlr/archive/${YEAR}/${MONTH}/${DAY}/${HOUR}</uri-template>
            <done-flag></done-flag>
        </dataset>

    </datasets>

    <input-events>
        <data-in name="xvlrInputEvent" dataset="xvlrInputDataset">
            <instance>${coord:current(0)}</instance>
        </data-in>
    </input-events>

    <output-events>
        <data-out name="xvlrOutputEvent" dataset="xvlrOutputDataset">
            <instance>${coord:current(0)}</instance>
        </data-out>
    </output-events>
    <action>
        <workflow>
            <app-path>${oozieAppHomeCatalog}/sub-workflows/Xvlr-parser-subworkflow.xml</app-path>
            <configuration>
                <property>
                    <name>inputDir</name>
                    <value>${coord:dataIn('xvlrInputEvent')}</value>
                </property>
                <property>
                    <name>outputDir</name>
                    <value>${coord:dataOut('xvlrOutputEvent')}</value>
                </property>
            </configuration>

        </workflow>
    </action>
</coordinator-app>

それは何をするためのものか?

  • 最初は2013-03-07T16:35Zに開始されたため、以前に
    収集されたすべてのデータは、基礎となるワークフロー (解析機能を備えた mr-job 呼び出し) を介して渡されました 。
    • 「過去の時間のデータセット」(現在の時間よりも短いデータセット時間) で作業している間、ワークフローは 1 つずつ実行されていました: /pastdate/hour_00 を消​​費した後、すぐに /pastdate/hour_01 を消費し始めました。
    • コーディネーターが現在の時刻に達すると、1 時間ごとにワークフローの呼び出しを開始しました (設計どおり: 05:35、06:35... 23:35)。
    • タイムアウト宣言を参照してください。データセットがありませんでした: たとえば、3 月 1 日の 10 時間目のデータはありませんでした。ワークフローは 3 分間待機してから終了しました。

問題は解決された。

于 2013-03-13T06:34:01.110 に答える