首页 > 解决方案 > Oozie 作业返回错误 HIVETEZHS2USERACCESS

问题描述

我最近在 HDInsight 3.6(之前的 3.5)上改造了 HDP 集群(2.6.2)。从那一刻起,我在旧环境中定义的 oozie Jobs 停止工作。有趣的是,它们适用于 shell 动作,但不适用于 hive 动作。我是从 Oozie 运行它们还是直接从 HDFS 运行它们没有区别。

以下工作流程步骤失败:

<action name="hive_action">
<hive xmlns="uri:oozie:hive-action:0.2">
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<configuration>
<property>
<name>mapreduce.job.queuename</name>
<value>${queueName}</value>
</property>
</configuration>
<script>${CODE_DIR}/hive/sql.hql</script>
<param>WPS_DB=wh</param>
</hive>

我确定参数传递正确。我得到的错误如下:

2018-07-04 14:34:49,721  WARN HiveActionExecutor:523 - SERVER[correct_server_name] USER[correct_user] GROUP[-] TOKEN[] APP[categorization] JOB[correct_job_name] ACTION[correct_action@wh] Launcher exception: HIVETEZHS2USERACCESS
java.lang.NoSuchFieldError: HIVETEZHS2USERACCESS at org.apache.hadoop.hive.ql.exec.tez.TezSessionState.setupSessionAcls(TezSessionState.java:233)
at org.apache.hadoop.hive.ql.exec.tez.TezSessionState.open(TezSessionState.java:188)
at org.apache.hadoop.hive.ql.exec.tez.TezSessionState.open(TezSessionState.java:116)
at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:557)
at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:681)
at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:625)
at org.apache.oozie.action.hadoop.HiveMain.runHive(HiveMain.java:336)
at org.apache.oozie.action.hadoop.HiveMain.run(HiveMain.java:313)
at org.apache.oozie.action.hadoop.LauncherMain.run(LauncherMain.java:58)
at org.apache.oozie.action.hadoop.HiveMain.main(HiveMain.java:69)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.oozie.action.hadoop.LauncherMapper.map(LauncherMapper.java:242)
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:54)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:453)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:170)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1866)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:164)

据我所知,工作所需的字段似乎没有在 hive、tez 或 hive2 的任何配置文件中定义。但是在同一类型中,没有像 hive.tez.hs2.user.access 这样的属性来配置 hive、tez 或 hive2 配置 xml。我尝试在 sql.hql 脚本中添加以下行:

set hive.execution.engine=tez; 
set hive.tez.hs2.user.access=true;

以及 hive-site.xml cond 文件的属性。

<property>
  <name>hive.tez.hs2.user.access</name>
  <value>true</value>
</property>

当然没有效果。我找到的关于该字段的唯一页面是: https ://hive.apache.org/javadocs/r2.2.0/api/org/apache/hadoop/hive/conf/HiveConf.ConfVars.html#HIVETEZHS2USERACCESS

但我真的不知道如何在配置/hql 文件中使用这个变量。感谢任何帮助。

标签: hadoophivehiveqlconfiguration-filesoozie

解决方案


推荐阅读