2016-10-14 9 views
1

Есть ли способ, которым я могу объявить HADOOP_USER_NAME как глобальную переменную в рабочем процессе oozie? на самом деле я создаю несколько действий оболочки для своего проекта, но не эффективно объявлять HADOOP_USER_NAME для каждого действия оболочки, поэтому мне интересно, может ли глобальная переменная иметь место в этом сценарии, если да, то как я могу продолжить ее. ..глобальная переменная HADOOP_USER_NAME oozie?

Ваша помощь очень ценится.

Это код, я использую

<workflow-app name="My_Workflow" xmlns="uri:oozie:workflow:0.5"> 
    <global> 
     <configuration> 
      <property> 
       <name>HADOOP_USER_NAME</name> 
       <value>*****</value> 
      </property> 
     </configuration> 
    </global> 
<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>script1.sh#script1.sh</file> 
    </shell> 
    <ok to="End"/> 
    <error to="Kill"/> 
</action> 
<end name="End"/> 

по какой-то причине я не получаю значение из HADOOP_USER_NAME, возможно, я делаю это неправильно, я должен записать его в файл оболочки как экспорт HADOOP_USER_NAME = ****;

+0

"Свойства" в вашем Oozie сценарии являются ** ява свойства **, которые передаются в класс Oozie "пусковой". Они не являются переменными среды !!! –

+0

И вообще, только «основные» действия Oozie наследуют глобальные свойства. Не действия оболочки/улья/sqoop/spark, которые на самом деле являются плагинами, со своей собственной XML-схемой. См. Первую часть этого ответа: http://stackoverflow.com/questions/38337362/oozie-properties-defined-in-file-referenced-in-global-job-xml-not-visible-in-wo/38338713# 38338713 –

ответ

1

Вы можете передать <property> к любому виду Oozie действие, выполняющее команду Java - но не действие оболочки.

В вашем конкретном случае, вы можете объявить <env-var> локально в каждое действие оболочки, и вы можете определить фактическое значение этой переменной глобально ...

  • в <parameter> части процесса
  • или в файле конфигурации на время отправки

    < имя рабочего процесса приложение = 'HELLO-ВФ' XMLNS = "URI: oozie: рабочий процесс: 0,4" >
        < параметры >
            < недвижимость >
                < имя > hadoopUser </имя >
                < значение > biloute </значение >
            </недвижимость >
        </параметры >
    ...
        < имя действия = 'некоторые скорлупе' >
            < оболочки XMLNS = "URI: oozie: оболочка действия: 0,1" > >
                < работа трекер > $ {jobTracker} </job-tracker >
                < имя-узла > $ {NameNode} </имя-узла >
                <Exec> script1.sh </Exec >
                < ENV-вар > HADOOP_USER = NAME = $ {hadoopUser} </env-var >
                < файл > script1.sh # script1.sh </файл >
            </оболочка >
            < нормально = "End"/>
            < error to = "Kill"/>
        </действие >
    ...

1

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

<workflow-app xmlns="uri:oozie:workflow:0.4" name="wf-name"> 
<global> 
<job-tracker>${job-tracker}</job-tracker> 
<name-node>${namd-node}</name-node> 
<job-xml>job1.xml</job-xml> 
<configuration> 
    <property> 
     <name>mapred.job.queue.name</name> 
     <value>${queueName}</value> 
     <name>HADOOP_USER_NAME</name> 
     <value>${username}</value> 
    </property> 
</configuration> 

+0

спасибо, я обновил свой вопрос – jthalliens