2013-10-09 1 views
0

У меня есть жёстко значения в workflow.xml файл (например, кэш-файл) Workflow.xml файл содержит follwoing баночку, как жёсткоКак удалить значения hardcode (например, файл кеша) из workflow.xml в oozie и сделать его динамическим?

archivedir/учебник-udf.jar # udfjar

Я хочу удалить учебник-UDF .jar hardcoded и сделать его динамическим. В один конец я могу это сделать, введя жестко закодированные значения в файл job.properies и передав его в файл workflow.xml. Как ниже код в workflow.xml

/$ {учебник-UDF} #udfjar

Это один из способов. Пожалуйста, приложите еще один способ сделать это.

Технология oozie, Hadoop

+0

Что случилось с переходом собственности? Зачем вам нужен другой способ сделать это? – Dmitry

ответ

2

Если я правильно понимаю, вы не хотите, чтобы жёстко имя файла фляги в файлах заданий (workflow.xml или job.properties), и вы искать пути к определить имя фляги во время выполнения. Таким образом, банку можно изменить между двумя последовательными прогонами одного и того же задания без необходимости обновления каких-либо файлов заданий.
Если мое понимание верное, вы можете иметь java-действие, которое «вычисляет» имя фляги. Это вычисление может быть различным: наличие флага в предопределенной папке HDFS, новейшая банка в предопределенной папке HDFS, имя флага, записанного в предопределенном файле в HDFS и т. Д.
В этом случае:
1. В классе Java вы "сохранить" имя баночку:

Properties props = new Properties(); 
props.setProperty("jarFileName", jarName); 
OutputStream os = new FileOutputStream(new File(System.getProperty("oozie.action.output.properties"))); 
props.store(os, ""); 
os.close(); 


2. В workflow.xml вы указываете, что класс Java производит свойств (< захват-выход/> тегов):

<action name="init-jar-name"> 
    <java> 
     <!-- Configurations --> 
     <main-class>com.example.JarNameFinder</main-class> 
     <capture-output /> <!-- Important for retrieving the properties set in the java class --> 
    </java> 
    <ok to="nextNodeName" /> 
    <error to="errorNodeName" /> 
</action> 


3. В workflow.xml, в том месте, вам нужно имя JAR-файла, необходимо указать это следующим образом:

${wf:actionData('init-jar-name')['jarFileName']} 
+0

Большое спасибо, его идеальное решение – user2861483

Смежные вопросы