2016-10-12 9 views
0

Я создаю oozie worklow, где мне нужно иметь многократные действия оболочки, но я столкнулся с проблемой, что для каждого действия оболочки, которое у меня есть в моем рабочем процессе, я должен объявить переменную среды, означающую, что если у меня есть 10 действий оболочки I нужно объявить 10 раз, мой вопрос: если есть какой-либо способ, я могу объявить/создать глобальные переменные, чтобы избежать дублирования переменных, которые делают то же самое?Как создать/объявить глобальные переменные в oozie?

Пример:

jon.properties 
    oozie.use.system.libpath=true 
    security_enabled=False 
    dryrun=False 
    nameNode=hdfs://localhost:8020 
    user_name=test 
    jobTracker=localhost::8032 

<workflow-app name="My_Workflow" xmlns="uri:oozie:workflow:0.5"> 
<start to="shell-a0a5"/> 
<kill name="Kill"> 
    <message>Error [${wf:errorMessage(wf:lastErrorNode())}]</message> 
</kill> 
<action name="shell-a0a5"> 
    <shell xmlns="uri:oozie:shell-action:0.1"> 
     <job-tracker>${jobTracker}</job-tracker> 
     <name-node>${nameNode}</name-node> 
     <exec>script1.sh</exec> 
     <file>/user/hive/script1.sh#script1.sh</file> 
    </shell> 
    <ok to="End"/> 
    <error to="Kill"/> 
</action> 
<end name="End"/> 

мой script1.sh ожидает параметр назван user_name, который у меня есть он заявил в job.properties, но это не работает в моей работе я получаю без вести аргумент имя пользователя

Я хотел бы знать, как я могу отправить параметры сценария оболочки из глобального файла конфигурации

Благодарности

+0

Возможный дубликат [Укорачивание Oozie рабочие процессы] (HTTP: // StackOverflow.com/questions/24327264/shortening-oozie-workflows) – YoungHobbit

+0

Спасибо, но это не работает в моем случае, я смог объявить переменную, но я не получаю значение в скрипте оболочки – jthalliens

+0

Можете ли вы предоставить образец что вы пробовали и о том, что/где он не работает. – YoungHobbit

ответ

0

Я не смог создать глобальные параметры, чтобы передавать значения как: user & password, HADOOP_USER_NAME (в моем ase), но я смог понять это с помощью сценария оболочки, поэтому в оболочке я определяю следующие параметры для моего предложения:

export HADOOP_USER_NAME=admin; 
connection=$(hdfs dfs -cat /user/connection.txt) 

где connection.txt содержит всю необходимую информацию для строки подключения затем с помощью sqoop я передаю данные в этом случае в файле оболочки:

sqoop $connection --table test --target-dir /user/hive/warehouse/Jeff.db/test/ --m 1 --delete-target-dir 

и в таким образом я смог решить свою проблему, мне пришлось объявить некоторые глобальные переменные, но это было необходимо для выполнения sqoop параллельно с использованием &.

0

Передача глобальных параметров в действие оболочки невозможна. Раздел «Глобалы» предназначен только для свойств. Для более подробной информации смотрите ответ на этот вопрос: OOZIE: properties defined in file referenced in global job-xml not visible in workflow.xml

передать параметры/переменные в действии оболочки вы можете либо передать эти значения в качестве аргументов через действие оболочки (вы можете объявить их в job.properties файл:

<action name="shell-<name>"> 
    <shell xmlns="uri:oozie:shell-action:0.3"> 
    <exec>script1.sh</exec> 
    <argument>${user_name}</argument> 
    <argument>${database}</argument> 
    <argument>${etc}</argument> 
    <file>/user/hive/script1.sh#script1.sh</file> 
    </shell> 
    <ok to="End"/> 
    <error to="Kill"/>  
</action> 

В вашем сценарии оболочки вы чем можете называть эти переменные, как это:

#!/bin/bash -e 
user_name=${1} 
database=${2} 
etc=${3} 
<your shell commands> 

, а затем вы можете использовать эти переменные s в вашем сценарии оболочки. Вы также можете использовать только $ 1, $ 2 и т. Д., Но для удобства чтения лучше сначала назвать свои аргументы.

Чтобы предотвратить прохождение большого количества аргументов для каждого и каждое действие оболочки вы можете также добавить config file к вашему действию оболочки, со всеми этими параметрами, и импортировать этот файл в Вашем сценарии оболочки:

<action name="shell-<name>"> 
    <shell xmlns="uri:oozie:shell-action:0.3"> 
    <exec>script1.sh</exec> 
    <file>/user/hive/script1.sh#script1.sh</file> 
    <file>/user/hive/CONFIG_FILE</file> 
    </shell> 
    <ok to="End"/> 
    <error to="Kill"/>  
</action> 
сценарий

оболочки:

#!/bin/bash 
. CONFIG_FILE 

<your shell commands> 
Смежные вопросы