глобальная переменная HADOOP_USER_NAME oozie?

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

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

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

<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"/>

for some reason I'm not getting the value from HADOOP_USER_NAME perhaps I'm doing it wrong, I had to write it down into the shell file as export HADOOP_USER_NAME=****;


person jthalliens    schedule 14.10.2016    source источник
comment
Свойства в сценарии Oozie — это свойства Java, которые передаются классу средства запуска Oozie. Это не переменные среды!!!   -  person Samson Scharfrichter    schedule 15.10.2016
comment
В любом случае, только основные действия Oozie наследуют глобальные свойства. Не действия shell/hive/sqoop/spark, которые на самом деле являются подключаемыми модулями со своей собственной схемой XML. См. первую часть этого ответа: stackoverflow.com/questions/38337362/   -  person Samson Scharfrichter    schedule 15.10.2016


Ответы (2)


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

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

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

    ‹workflow-app name='hello-wf' xmlns="uri:oozie:workflow:0.4"›
    ‹parameters›
    ‹property›
    ‹name›hadoopUser‹/name›
    ‹ value›biloute‹/value›
    ‹/property›
    ‹/parameters›
    ...
    ‹action name='some-shell'›
    ‹shell xmlns="uri: oozie:shell-action:0.1"››
    ‹job-tracker›${jobTracker}‹/job-tracker›
    ‹name-node›${nameNode}‹/name-node›
    ‹ exec›script1.sh‹/exec›
    ‹env-var›HADOOP_USER=NAME=${hadoopUser}‹/env-var›
    ‹file›script1.sh#script1.sh‹/file›
    ‹/shell›
    ‹ok to="End"/›
    ‹error to="Kill"/›
    ‹/action›
    ...

person Samson Scharfrichter    schedule 15.10.2016

Вы можете добавить глобальный тег поверх рабочего процесса, который действует как глобальная конфигурация для действий в этом 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>

person K S Nidhin    schedule 14.10.2016