Я рефакторинг рабочего процесса oozie, весь рабочий процесс записан в одном файле, пытался разбить его на подпроцессы.Но после рефакторинга он начал выдавать
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.hadoop.io.retry.RetryPolicies.retryForeverWithFixedSleep(JLjava/util/concurrent/TimeUnit;)Lorg/apache/hadoop/io/retry/RetryPolicy;
Исходный рабочий процесс:
<?xml version="1.0" encoding="UTF-8"?>
<workflow-app xmlns="uri:oozie:workflow:0.5" name="Main">
<start to="loadToHive"/>
<action name="loadToHive">
<shell xmlns="uri:oozie:shell-action:0.2">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>yarn.nodemanager.container-executor.class</name>
<value>LinuxContainerExecutor</value>
</property>
<property>
<name>yarn.nodemanager.linux-container-executor.nonsecure-mode.limit-user</name>
<value>true</value>
</property>
</configuration>
<exec>${loadToHiveActionScript}</exec>
<argument>${outPutPath}</argument>
<argument>${dataSetPath}</argument>
<argument>${hiveDB}</argument>
<env-var>HADOOP_USER_NAME=${wf:user()}</env-var>
<file>${loadToHiveActionScriptPath}#${loadToHiveActionScript}</file>
</shell>
<ok to="uplaodToMysql"/>
<error to="handleFailure"/>
</action>
Рефакторированный файл:
<?xml version="1.0" encoding="UTF-8"?>
<workflow-app xmlns="uri:oozie:workflow:0.5" name="Main">
<start to="loadToHive"/>
<action name="loadToHive">
<sub-workflow>
<app-path>${oozieProjectRoot}/commonWorkflows/mongoTransform.xml</app-path>
<propagate-configuration/>
</sub-workflow>
<ok to="uplaodToMysql"/>
<error to="handleFailure"/>
</action>
Файл подпроцесса:
<?xml version="1.0" encoding="UTF-8"?>
<workflow-app name="mongoTransform-${module}" xmlns="uri:oozie:workflow:0.5">
<start to="loadToHiveSub"/>
<action name="loadToHive">
<shell xmlns="uri:oozie:shell-action:0.2">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>yarn.nodemanager.container-executor.class</name>
<value>LinuxContainerExecutor</value>
</property>
<property>
<name>yarn.nodemanager.linux-container-executor.nonsecure-mode.limit-user</name>
<value>true</value>
</property>
</configuration>
<exec>${loadToHiveActionScript}</exec>
<argument>${outPutPath}</argument>
<argument>${dataSetPath}</argument>
<argument>${hiveDB}</argument>
<env-var>HADOOP_USER_NAME=${wf:user()}</env-var>
<file>${loadToHiveActionScriptPath}#${loadToHiveActionScript}</file>
</shell>
<ok to="end"/>
<error to="handleFailure"/>
</action>
loadToHiveActionScript.sh
hive -e "Drop table if exists ${3}.${i}_intermediate";
...
hive -e " Alter table ${3}.${i}_intermediate RENAME TO ${3}.$i";
Когда этот файл запускается в основном файле рабочего процесса, он прекрасно работает.Может ли это быть проблемой env-var: HADOOP_USER_NAME = $ {wf: user ()}