java连接hive代码示例(Kerberos)

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所在安装节点的主机名

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值