zoukankan      html  css  js  c++  java
  • java 链接hive(kerberos认证)实例 以及 错误点讲解

    没有kerberos认证的hive链接比较方便,但是有kerberos认证就需要多做一些事情。

    1、pom.xml 依赖:

    <dependency>
       <groupId>org.apache.hive</groupId>
       <artifactId>hive-jdbc</artifactId>
       <version>0.12.0</version>
    </dependency>
    <dependency>
       <groupId>org.apache.hadoop</groupId>
       <artifactId>hadoop-client</artifactId>
       <version>2.7.2</version>
    </dependency>

    2、示例代码:(标黄的需要认真修改)

    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.security.UserGroupInformation;
     
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
     
    public class App {
        private static String JDBC_DRIVER = "org.apache.hive.jdbc.HiveDriver";
        private static String CONNECTION_URL ="jdbc:hive2://10.23.13.196:10000/ods;principal=hive/tw-manager@TDH";
     
        static {
            try {
                Class.forName(JDBC_DRIVER);
     
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
     
        public static void main(String[] args) throws Exception  {
            Class.forName(JDBC_DRIVER);
     
            //登录Kerberos账号
            System.setProperty("java.security.krb5.conf", "/root/tdh-cdh/ticket/krb5.conf");
     
            Configuration configuration = new Configuration();
            configuration.set("hadoop.security.authentication" , "Kerberos" );
            UserGroupInformation. setConfiguration(configuration);
            UserGroupInformation.loginUserFromKeytab("hive@TDH" , "/root/tdh-cdh/ticket/hive.keytab");
     
            Connection connection = null;
            ResultSet rs = null;
            PreparedStatement ps = null;
            try {
                connection = DriverManager.getConnection(CONNECTION_URL);
                ps = connection.prepareStatement("show tables");
                rs = ps.executeQuery();
                while (rs.next()) {
                    System.out.println(rs.getString(1));
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        }
    }
    

      

    3、注意事项:

    (1)krb5.conf、hive.keytab2个文件,路径要改对

    (2)jar依赖包版本和服务器hadoop、hive版本要匹配,否则会报错:

        Caused by: org.apache.thrift.TApplicationException: Required field 'client_protocol' is unset! Struct:TOpenSessionReq

        原因:This indicates a version mismatch between client and server, namely that the client is newer than the server, which is your case.

        客户端和服务端包的版本不一致;

    (3)错误:Error: Could not open client transport with JDBC Uri: jdbc:hive2://master:10000/default: Peer indicated failure:

        Unsupported mechanism type PLAIN (state=08S01,code=0)

        解决: jdbc连接url时,缺少principal,整个url连接如下:jdbc:hive2://master:10000/default;principal=hive/master@HADOOP.COM


    (4)错误: Could not open client transport with JDBC Uri: jdbc:hive2://master:10000/default;principal=hdfs/master@HADOOP.COM: Peer indicated failure:

        GSS initiate failed (state=08S01,code=0)
      解决: jdbc连接url时,principal的用户有问题,整个url连接如下:
        principal=hdfs/master@HADOOP.COM 替换为:hive/master@HADOOP.COM
        jdbc:hive2://master:10000/default;principal=hive/master@HADOOP.COM

    参考:

      1、https://blog.csdn.net/DH2442897094/article/details/108007806?utm_medium=distribute.pc_relevant.none-task-blog-blogcommendfrommachinelearnpai2-2.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-blogcommendfrommachinelearnpai2-2.channel_param

      2、https://blog.csdn.net/weixin_44865574/article/details/106420734?utm_medium=distribute.pc_relevant.none-task-blog-title-3&spm=1001.2101.3001.4242

  • 相关阅读:
    解决一切日期问题的日期类
    汉诺塔类型问题解析
    窗口滑动
    大暑假集训总结(反思)
    找硬币题解
    Fiolki题解
    大逃亡题解
    Luogu6080 [USACO05DEC]Cow Patterns G
    Luogu3193 HNOI2008 GT考试
    Codeforces1355F Guess Divisors Count
  • 原文地址:https://www.cnblogs.com/51python/p/13651620.html
Copyright © 2011-2022 走看看