以下使用的是
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
网友评论