Oozie Java操作-使用Kerberose委托令牌执行配置单元查询

问题描述

我正在尝试从Java程序执行Hive查询,为此,我在oozie工作流程中使用了Oozie Java操作。我正在使用下面的代码片段来做到这一点。这似乎失败了。但是,如果我使用shell操作执行此代码,则效果很好。需要帮助了解我在做什么错。不能选择使用keytab文件,而必须使用委托令牌。

public static Connection createConnection(String url) {
    Properties props = new Properties();
    props.put("auth","delegationToken");
    Configuration conf = new Configuration();
    conf.set("hadoop.security.authentication","Kerberos");
    UserGroupinformation.setConfiguration(conf);
    try {
      UserGroupinformation ugi = UserGroupinformation.getCurrentUser();
      
      if (connection == null || connection.isClosed()) {
        connection = (Connection)ugi.doAs(new PrivilegedExceptionAction<Object>() {
              public Object run() {
                Connection con = null;
                try {
                  Class.forName("org.apache.hive.jdbc.HiveDriver");
                  con = DriverManager.getConnection(url,props);
                } catch (Exception ex) 
                  throw new IllegalStateException(errMsg,e);
                } 
                return con;
              }
            });
      }
    } catch (Exception ex) {
      throw new IllegalStateException(errMsg,ex);
    } 
    return connection;
  }
  

错误

Oozie Launcher失败,主班 [org.apache.oozie.action.hadoop.JavaMain],main()抛出异常, java.lang.IllegalStateException:获取Hive JDBC连接时出错 org.apache.oozie.action.hadoop.JavaMainException: java.lang.IllegalStateException:获取Hive JDBC连接时出错 在org.apache.oozie.action.hadoop.JavaMain.run(JavaMain.java:58)处 org.apache.oozie.action.hadoop.LauncherMain.run(LauncherMain.java:81) 在org.apache.oozie.action.hadoop.JavaMain.main(JavaMain.java:35)处 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)位于 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:498)在 org.apache.oozie.action.hadoop.LauncherMapper.map(LauncherMapper.java:235) 在org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:54)处 org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:459)在 org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)在 org.apache.hadoop.mapred.YarnChild $ 2.run(YarnChild.java:164)在 java.security.AccessController.doPrivileged(本机方法),位于 javax.security.auth.Subject.doAs(Subject.java:422)在 org.apache.hadoop.security.UserGroupinformation.doAs(UserGroupinformation.java:1924) 在org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)