问题描述
我正在尝试从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 (将#修改为@)