Передача значения переменной pig из одного действия в другое в Oozie

Мой фрагмент рабочего процесса oozie выглядит так:

<workflow-app name="Abandonment_Workflow" xmlns="uri:oozie:workflow:0.5">
    <start to="pig-0581"/>
    <kill name="Kill">
        <message>Action failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
    </kill>
    <action name="pig-0581">
        <pig>
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <script>/user/793972/TRM/1.pig</script>
              <param>input=/data/*/*.bz2</param>
            <archive>/user/a.jar#a.jar</archive>
        </pig>
        <ok to="fork-3d77"/>
        <error to="Kill"/>
    </action>
    <action name="pig-a915">
        <pig>
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <script>/user/793972/TRM/2.pig</script>
              <param>input=/data/*/*.bz2</param>
            <archive>/user/a.jar#a.jar</archive>
            </pig>
            <ok to="join-31be"/>
        <error to="Kill"/>
    </action>
     .......
    <end name="End"/>
</workflow-app>

В скрипте свиньи 1.pig

data = LOAD $input USING PigStorage('\t') AS 
(timestamp:chararray,server:chararray,sessionid:chararray);

В скрипте свиньи 2.pig я хочу использовать переменную -'data' в 1.pig,

cleandata = генерировать данные foreach .....

Возможно ли это сделать.

Если да, то подскажите как


person Suhita Ghosh    schedule 25.09.2015    source источник
comment
Я не уверен в точном требовании использования данных из сценария pig1.pig в сценарий pig2.pig, так как вы можете комбинировать один и тот же один сценарий Pig сам по себе, поскольку вы вызываете оба действия сценария свиньи один за другим. так как в обоих случаях дамп будет загружен в папку Temp.   -  person Deb    schedule 25.09.2015
comment
Правильный дебет. Извините за путаницу. Я не опубликовал весь рабочий процесс oozie. Мое намерение состоит в том, чтобы запустить 3 сценария свиньи параллельно, используя значение первого сценария свиньи. Отсюда вопрос   -  person Suhita Ghosh    schedule 25.09.2015
comment
Нет, я не думаю, что это возможно   -  person Frederic    schedule 27.09.2015


Ответы (1)


Я думаю, что вы не можете достичь этого в свинье. Когда скрипты свиньи выполняются, компилятор преобразует латинские команды свиньи в одно или несколько заданий MR, и они будут выполняться независимо. Таким образом, два сценария свиньи не могут общаться друг с другом.

Тем не менее, есть кое-что, что вы можете попробовать, это макросы Pig.

--LoadInput.macro
DEFINE loadInput(input) returns data{
$data = LOAD '$input' USING PigStorage('\t') AS 
       (timestamp:chararray,server:chararray,sessionid:chararray);
}

Свинья Сценарий 1

IMPORT '/path/LoadInput.macro';
data = loadInput($input);
cleandata = FOREACH data GENERATE timestamp, sessionid;

Сценарий свиньи 2

IMPORT '/path/LoadInput.macro';
data2 = loadInput($input);
cleandata2 = FOREACH data2 GENERATE timestamp, server;
person Naveen    schedule 30.09.2015