2015-09-25 3 views
0

Мой 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 генерировать .....

Является ли это это можно сделать.

Если да, то, пожалуйста, подсказывают, как

+0

не уверен, точное требование Использование данных из pig1.pig сценария pig2.pig сценарий, как вы можете в сочетании тот же самый сценарий Свинья сам, поскольку вы называете действие сценария свиньи одним за другим. , как и в случае, когда Dump будет загружен в местоположение Temp. – Deb

+0

Правильный Дебют. Извините за беспорядок. Я не разместил весь рабочий процесс oozie. Мое намерение состоит в том, чтобы запустить скрипт с тремя свиньями параллельно, используя значение первого скрипта свиньи. Отсюда вопрос –

+0

Нет, я не думаю, что это возможно – Frederic

ответ

0

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

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

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

Pig Сценарий 1

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

Pig Сценарий 2

IMPORT '/path/LoadInput.macro'; 
data2 = loadInput($input); 
cleandata2 = FOREACH data2 GENERATE timestamp, server; 
Смежные вопросы