2016-04-21 2 views
0

У меня несколько сложный рабочий процесс Оози, и я хотел бы видеть некоторые свойства в разных точках потока. Очевидным решением является просто написать сообщение для журналов.Возможно ли зарегистрировать сообщение из рабочего процесса Oozie без его убийства

Я прошел через official documentation, и кажется, что единственным действием, которое поддерживает ведение журнала, является действие Kill!

Есть ли способ для регистрации набора свойств без уничтожения рабочего процесса?

Update (чтобы предоставить более подробную информацию)

Итак, представьте, что я (упрощенно) рабочий процесс выглядит примерно так:

<workflow-app name="myWorkflow" xmlns="uri:oozie:workflow:0.5"> 
    <start to="action1"/> 

    <kill name="Kill"> 
    <message>Failed: error ${myField}</message> 
    </kill> 

    <action name='action1'> 
    <java> 
     <job-tracker>${jobTracker}</job-tracker> 
     <name-node>${nameNode}</name-node> 
     <configuration> 
      <property> 
       <name>mapred.job.queue.name</name> 
       <value>default</value> 
      </property> 
     </configuration> 
     <main-class>my.Class</main-class> 
     <arg>${myArgument}</arg> 
     <capture-output/> 
    </java> 
    <ok to="action2" /> 
    <error to="Kill" /> 
    </action> 

    <action name='action2'> 
    <ok to="End" /> 
    <error to="Kill" /> 
    </action> 

    <end name="End"/> 
</workflow-app> 

Внутри процесса я получил поля под названием $ {MyField}, $ {myArgument}, $ {jobTracker} и $ {nameNode}. Некоторые из них являются свойствами, установленными процессом запуска, другие будут установлены классом Java класса I из «action1». Между выполнением «action1» и «action2» я хотел бы записывать значения этих полей. Меня не волнует, куда записываются значения, я просто должен уметь видеть, что значения.

Я НЕ хочу называть мое действие «убить» для ведения журнала, потому что важно, чтобы выполнялось действие «action2».

+0

Вы имели в виду элемент 'message' в узле' kill'? О каких журналах вы говорите и какие свойства вы хотите распечатать? – YoungHobbit

+0

@ YoungHobbit, я добавил несколько подробностей к вопросу, который должен объяснить проблему более подробно. Короткий ответ заключается в том, что я хочу регистрировать любую переменную, которая может использоваться как выражение Oozie. Мне все равно, какие журналы я пишу, просто что-то, что я могу прочитать позже. – Stormcloud

+0

'$ {myField}, $ {myArgument}, $ {jobTracker} и $ {nameNode}' все они будут определены в файле 'job.properties'. что вы подразумеваете под «другими», будет задан классом Java, который я вызываю из «action1». «Вы хотите написать некоторые свойства во время одного действия, а затем захотите использовать их в следующих действиях, так как это другой механизм. Я уверен, что вам нужно здесь. – YoungHobbit

ответ

0

Один из способов, которым я мог видеть, - это положить сценарий оболочки в конец рабочего процесса со значениями, которые будут регистрироваться как параметры сценария оболочки. Внутри сценария оболочки напишите значения этих параметров в файле и скопируйте файл в hdfs.

После выполнения задания вы можете проверить значение этих свойств в файле, хранящемся в hdf.

Надеюсь, это поможет.