2016-07-28 4 views
3

ich auf das folgende Problem bin struggeling Variablen in einer Oozie Workflow-Definition mit Überprüfung, ob eine bestimmte Datei erstellt wurde. Es ist mit absolutem Pfad wie die folgenden zu arbeiten, aber ich kann einen absoluten Pfad nicht verwenden:Oozie fs: existiert mit Variablen

${fs:exists('/mypath/file.hql')} 

In meinem Fall der NameNode und die Workflow-ID ersetzt werden muss, sondern in dem Entscheidungsknoten dieser nicht funktioniert. Die Variablen werden nicht ersetzt, was ist die korrekte Syntax dafür?

<decision name="check-hql-file-created"> 
    <switch> 
     <case to="hive-exec-il2rl-hql4baseentity"> 
      ${fs:exists(${nameNode}'/tmp/oozie_tmp/'${wf:id()}'.hql')} 
     </case> 
     <default to="il2rl-loop"/> 
    </switch> 
</decision> 

Antwort

4

es arbeitet mit Verkettung wie folgt aus:

 <switch> 
     <case to="hive-exec-il2rl-hql4baseentity"> 
      ${fs:exists(concat(concat(concat(concat(concat(nameNode, '/tmp/oozie_tmp/'), wf:id()), '_'), replaceAll(asJson, "\\{\"|,.+$", "")), '.hql')) == "true"} 
     </case> 
     <default to="il2rl-loop"/> 
    </switch> 
+2

Ich habe mit diesem Problem auch zu kämpfen. Dies funktioniert bei vorhandenen EL-Ausdrücken, aber wenn Sie Konfigurationseigenschaften für einen Workflow haben, können Sie im EL-Ausdruck auf die Namen verweisen. Beispiel, 'FILE_PATH' kann nicht' $ {FILE_PATH} 'im EL-Ausdruck sein, es muss' FILE_PATH' sein. – pjames

+0

Wenn zwei Variablen übergeben werden sollen, dann verwenden Sie $ {fs: exists (concat (varaible1, variable2))} ' –

0

Sagen Sie planen, Variablen zu verwenden, 'X' und 'Y', in einem gewissen Format wie/tmp/X/Y (lasst uns nennt den 'Pfad'), dann gilt:

  1. definieren X, Y und 'Pfad' als Variable wie so

    PATH = /tmp/${X}/${Y}/

  2. Dann PATH wie verwenden:

    ${fs:exists(PATH)}

das funktioniert.

Wenn Sie jedoch diesen Workflow über Koordinatoren ausführen möchten, ist es besser, zunächst separat zu jeder dieser Variablen zuweisen. Wie folgt:

  1. Definieren X, Y und 'Pfad' als Variable wie so

    X = value1

    Y = value2

    PATH = /tmp/${X}/${Y}/

  2. Dann Pfad verwenden als:

    ${fs:exists(PATH)}

und tun Sie genau das gleiche in Ihrem Koordinator.

Hinweis: value1 und value2 können Oozie-Ausdrücke sein.