我使用hadoop和kerberos环境,我是kerberos的新手。我想使用java访问hive数据库,我浏览了蜂巢官方网站,但他们给出了非常概括的信息。
请有人给我具体的答案吗?
答案 0 :(得分:2)
我认为kerbrose实现是一个非常庞大的概念,并且通过它执行一项小任务可能非常耗时。
这是快速解决您的问题!
要进入蜂巢并在安全的环境中,请考虑以下事项:
- 要访问配置单元,您需要提供特定于该配置单元版本的所有jar,如蜂巢官方网站上的列表所示。
- Next提供hive版本特定的驱动程序名称,例如for hive server2“org.apache.hive.jdbc.HiveDriver”
- 提供配置单元连接URL,例如 JDBC:hive2://node.addr:10000 /默认值; principal=hive/node.addr@ABCREALM.LOCAL
我们在连接URL中提供连接地址和安全认证。对于kerberos,将有认证字符串,这是我们在kerberos实现时设置的kerberos原则。
该字符串与我们使用 beeline 连接到配置单元服务器时提供的字符串相同,例如 beeline -u“jdbc:hive2://node.addr:10000 / default; principal =hive/node.addr@ABCREALM.LOCAL”
这是一个小代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Date;
public class Connect {
private static ResultSet res;
public static void main(String[] args) throws Exception {
Class.forName("org.apache.hive.jdbc.HiveDriver");
System.out.println("Process started at:"+new Date());
Connection con = DriverManager.getConnection("jdbc:hive2://node.addr:10000/default;principal=hive/node.addr@ABCREALM.LOCAL");
Statement stmt = con.createStatement();
stmt.execute("create table testTable (key string,col1 string)");
System.out.println("Table Created successfully");
con.close();
}
}
答案 1 :(得分:1)
使用Kerberos,它会变得更加复杂。
任何jdbc代码之前的配置:
进口:
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.log4j.Logger;
init配置代码:
Configuration systemConf = new Configuration();
if (isLocalRun()) {
LOG.info("Running on cluster, using hive-site.xml config");
systemConf.addResource(new Path("/etc/hadoop/current/hive/hive-site.xml"));
} else {
LOG.info("Running from local computer, no hive-site.xml added, using only JDBC");
}
systemConf.set("hadoop.security.authentication", "Kerberos");
UserGroupInformation.setConfiguration(systemConf);
UserGroupInformation.loginUserFromKeytab(principal, keytabPath);
然后你可以得到连接:
try (Connection conn = DriverManager.getConnection(conf.hive().getConnectionString())) {
HiveDatabaseMetaData metadata = (HiveDatabaseMetaData) conn.getMetaData();
parseDatabase(hiveDatabase, conn, metadata,
}
Hive jdbc驱动程序的maven依赖
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>2.0.0</version>
<classifier>standalone</classifier>
</dependency>