2016-01-05 3 views
0

Возможно ли переопределить глобальное значение свойства в под-рабочих потоках?Обновление глобальной собственности в oozie sub workflow

В главном/workflow.xml

<workflow-app name="test-wf" xmlns="uri:oozie:workflow:0.4"> 

     <global> 
       <configuration> 
       <property> 
        <name>global-prop</name> 
        <value>global-val</value> 
       </property> 
       </configuration> 
     <global> 

    <start to="start" /> 
     <action name="start"> 
      <sub-workflow> 
      <app-path>${wf:appPath()}/start</app-path> 
      .... 
      ... 
    <decision name="wf-decision"> 
     <switch> 
      <case to="wf-A">${global-prop}</case> 
<!-- can the value of global-prop be updated in main/start/workflow.xml, ie start subworkflow --> 
      <default to="end" /> 
     </switch> 
    </decision> 

Когда рабочий приходит к решению узла, он принимает путь в зависимости от глобальной-вероят. Я хочу, чтобы значение global-prop зависело от результата начального подчиненного потока.

ответ

1

решение узел ... в зависимости от global-prop. Я хочу, чтобы глобальный проп значение зависит от результатов суб-процесса

¤ Комментарий # 1: от общих принципов, было бы больше смысла иметь решение зависит от как результат и глобальное (и постоянное) свойство. Использование логического выражения EL, например, (см. Некоторые примеры there).

¤ Комментарий # 2: есть много путаницы в Oozie documentation между свойства как коротка для Hadoop свойств, которые передаются на рабочие места ПРЯЖИ; и Workflow свойство также называют параметров, которые являются EL переменными (называемыми свойства снова в документации Е.Л., блин), которые используются для определения значений свойств/аргументов/и т.д.. но не передается на задания YARN.

То, как вы используете свой «глобальный прокси», должно быть определено в разделе <parameters> вместо <global>.

¤ Комментарий № 3: Параметры и свойства AFAIK Oozie неизменяемы; Вы можете установить их значение только один раз, используя ...

  • параметры> жестко закодированные строковые литералы
  • свойства> литералы и/или параметры, и/или функции EL

Существует также вопрос о масштабе - то есть когда «глобальное» свойство и «локальное» свойство (определенное внутри действия суб-рабочего потока, опять из строки/параметра/EL fct) имеют то же точное имя, «местный» имеет преимущество.

¤ Комментарий # 4: есть способ, чтобы получить некоторую информацию о хСтатус от действия Java/Свиньи/Shell, используя <capture-output> процедуру (см в Oozie документации классической example) но вы можете получить это от такой же Рабочий процесс. С Sub-Workflow, выполненным в отдельном контексте с отдельным идентификатором, вам не повезло.

¤ Soooo ...когда все остальное потерпело неудачу, единственная надежда - пойти назад к основам. Когда-либо слышал об этом пустом файле HDFS с именем _SUCCESS, который создает Pig при завершении, так что дальнейшая обработка может запускаться автоматически (например, координатором oozie)?

Если Суб-Workflow каким-то образом создает HDFS файл с заранее определенным именем, то решение может использовать HDFS EL function проверить, был ли создан этот файл или нет:

<case to="Happy">${fs:exists(concat(wf:conf("status.dir"),"/__HAPPY"))}</case> 
Смежные вопросы