hadoop version:3.1
private static Connection initConn(String hive_driverName, String krb5FilePath, String krb5KeyTabPath, String krbPrincipal, String userName, String url) throws SQLException, IOException, ClassNotFoundException {
System.setProperty("java.security.krb5.conf", krb5FilePath);
System.setProperty("sun.security.krb5.debug", "true");
// 解决windows中执行可能出现找不到HADOOP_HOME或hadoop.home.dir问题
// Kerberos认证
org.apache.hadoop.conf.Configuration configuration = new org.apache.hadoop.conf.Configuration();
configuration.set("hadoop.security.authentication", "Kerberos");
configuration.set("keytab.file", krb5KeyTabPath);
configuration.set("kerberos.principal", krbPrincipal);
UserGroupInformation.setConfiguration(configuration);
UserGroupInformation.loginUserFromKeytab(userName, krb5KeyTabPath);
// 创建hive连接
Class.forName(hive_driverName);
Connection connection = DriverManager.getConnection(url);
if (connection == null) {
throw new NullPointerException("获取connection失败");
}
return connection;
}
一般报 Can't get Kerberos realm 错误是因为,找不到 krb5.conf文件路径
pom依赖
<!--hive连接-->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>3.2.0</version>
<exclusions>
<exclusion>
<groupId>jdk.tools</groupId>
<artifactId>jdk.tools</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>3.1.2</version>
<exclusions>
<exclusion>
<groupId>org.eclipse.jetty</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
阿里云镜像
<repository>
<id>aliyun</id>
<name>aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</repository>