java连接hive代码示例(Kerberos)
非Kerberos环境下,Java连接hive的Demo很多,而且没有什么需要注意的,直接使用即可。但是在Kerberos环境下,有些点需要特别注意下。(非Kerberos环境,把AuthKrb5注掉即可)
1、代码示例
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.security.UserGroupInformation;
import java.io.IOException;
import java.sql.*;
public class TestHive {
private static String DRIVER = "org.apache.hive.jdbc.HiveDriver";
private static Connection conn ;
private static String USERNAME = "";
private static String PASSWORD = "";
private static Statement stat = null;
private static ResultSet rs = null;
public static void AuthKrb5(String principal, String keytabPath) {
// 设置jvm启动时krb5的读取路径参数
System.setProperty("java.security.krb5.conf","C:\\Users\\swh\\Desktop\\krb5.conf");
// 配置kerberos认证
Configuration conf = new Configuration();
conf.setBoolean("hadoop.security.authorization", true);
conf.set("hadoop.security.authentication", "kerberos");
conf.set("hive.security.authentication", "kerberos");
UserGroupInformation.setConfiguration(conf);
try {
UserGroupInformation.loginUserFromKeytab(principal, keytabPath);
System.out.println("Kerberos 身份认证成功");
} catch (IOException e) {
System.out.println("Kerberos 身份认证失败:");
}
}
public static void main(String[] args) {
// principal 和 keytab 必须对应
String principal = "hive/test05@BIGDATA";
String keytabPath = "C:\\Users\\swh\\Desktop\\hive.service.keytab";
// 注意,URL中principal中的hostname必须为hiveserver2所在节点的主机名
String URL = "jdbc:hive2://test07:10000/default;principal=hive/test07@BIGDATA";
AuthKrb5(principal, keytabPath);
try{
Class.forName(DRIVER);
conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
}catch (Exception e){
e.printStackTrace();
}
try{
stat = conn.createStatement();
String sql = "show databases";
rs = stat.executeQuery(sql);
while (rs.next()){
System.out.println(rs.getString(1));
}
System.out.println("Show database successfully.");
}catch (SQLException e){
System.out.println("Failed show data base.");
}
}
}
2、注意点
1、java连接hive时,本地必须有krb5.conf、hive.server.keytab这2个文件
2、报错:Error: Could not open client transport with JDBC Uri: jdbc:hive2://test07:10000/default: Peer indicated failure: Unsupported mechanism type PLAIN (state=08S01,code=0)
原因:jdbc连接url时,缺少principal,整个url连接下:jdbc:hive2://test07:10000/default;principal=hive/test07@BIGDATA
3、报错:Could not open client transport with JDBC Uri: jdbc:hive2://sizu07:10000/default;principal=hive/test07@BIGDATA: Peer indicated failure: GSS initiate failed
原因:URL中principal错误。票据名中test07需为hiveserver2所在安装节点的主机名