举一个hive3 jdbc栗子

作者: 大猪大猪 | 来源:发表于2018-09-25 17:45 被阅读2次

    以下使用的是kerberos认证模式进行连接

    使用过程

    导入jdbc

    compile group: 'org.apache.hive', name: 'hive-jdbc', version: '3.0.0'
    

    HiveTest.java

    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.security.UserGroupInformation;
    import org.junit.Before;
    import org.junit.Test;
    
    import java.sql.*;
    
    public class HiveTest {
        private static String url = "jdbc:hive2://storm4.starsriver.cn:2181,storm2.starsriver.cn:2181,storm3.starsriver.cn:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2;";
        private static String driverName ="org.apache.hive.jdbc.HiveDriver";
        private static Connection conn;
        private static PreparedStatement ps;
        private static ResultSet rs;
    
        @Before
        public void init() throws Exception {
            System.setProperty("java.security.krb5.conf", "/etc/krb5.conf");
            final String user = "admin/admin@DEMO.COM";
            final String keyPath = "/etc/security/keytabs/admin.keytab";
    
            Configuration conf = new Configuration();
            conf.addResource("hive-site.xml");
            conf.set("hbase.zookeeper.quorum", "host4.demo.com,host2.demo.com,host3.demo.com");
            conf.set("hadoop.security.authentication", "kerberos");
    
            UserGroupInformation.setConfiguration(conf);
            UserGroupInformation.loginUserFromKeytab(user, keyPath);
        }
    
        public Connection getConnnection() {
            try {
                Class.forName(driverName);
                conn = DriverManager.getConnection(url);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
                System.exit(1);
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return conn;
        }
        public PreparedStatement prepare(Connection conn, String sql) {
            PreparedStatement ps = null;
            try {
                ps = conn.prepareStatement(sql);
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return ps;
        }
        public void getAll(String tablename) {
            conn=getConnnection();
            String sql="select * from "+tablename;
            System.out.println(sql);
            try {
                ps=prepare(conn, sql);
                rs=ps.executeQuery();
                int columns=rs.getMetaData().getColumnCount();
                while(rs.next()) {
                    for(int i=1;i<=columns;i++) {
                        System.out.print(rs.getString(i));
                        System.out.print("\t\t");
                    }
                    System.out.println();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    
        @Test
        public void testCount(){
            getAll("TEST_LOG");
        }
    }
    

    输出结果

    SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
    SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
    select * from TEST_LOG
    1       lake        
    2       lake1       
    3       admin       
    4       admin       
    
    Process finished with exit code 0
    
    

    相关文章

      网友评论

        本文标题:举一个hive3 jdbc栗子

        本文链接:https://www.haomeiwen.com/subject/czbloftx.html