hive -e выдает NoSuchMethodError при вызове из подпроцесса oozie с использованием <shell>, отлично работает при вызове из основного рабочего процесса - PullRequest
0 голосов
/ 02 мая 2019

Я рефакторинг рабочего процесса 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 ()}

...