我在kerberos环境中使用hadoop,而且我对kerberos还不熟悉。我想用java访问hive数据库,我浏览了hive官方网站,但他们给出了非常笼统的信息。有人能给我具体的答案吗?
kyxcudwk1#
使用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;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.log4j.Logger;
初始化配置代码:
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);
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, }
try (Connection conn = DriverManager.getConnection(conf.hive().getConnectionString())) {
HiveDatabaseMetaData metadata = (HiveDatabaseMetaData) conn.getMetaData();
parseDatabase(hiveDatabase, conn, metadata,
配置单元jdbc驱动程序的maven依赖关系
<dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <version>2.0.0</version> <classifier>standalone</classifier> </dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>2.0.0</version>
<classifier>standalone</classifier>
</dependency>
islocalrun()=这取决于是在计算机中运行还是直接在集群上运行在集群上运行时,需要为所有配置添加hive-site.xml(它可以是与本例中不同的路径)从本地使用jdbc连接字符串进行外部集群连接
vm0i2vca2#
我认为kerbrose实现是一个非常庞大的概念,对于一个小任务来说,完成它可能会非常耗时。这是你的问题的快速解决方法!要在安全环境中访问配置单元,请考虑以下事项:-要访问hive,您需要提供特定于该hive版本的所有jar,如hive官方网站上的列表所示。-接下来提供特定于配置单元版本的驱动程序名,例如,对于配置单元server2“org.apache.hive.jdbc.hivedriver”-提供配置单元连接url,例如。jdbc:hive2://节点。addr:10000/default;主体=配置单元/节点。addr@realm.local我们在连接url中提供了连接地址和安全认证。对于kerberos,将有身份验证字符串,这是我们在kerberos实现时设置的kerberos原则。此字符串与我们使用beeline(例如beeline-u)连接到配置单元服务器时提供的字符串相同jdbc:hive2://节点。addr:10000/default;主体=配置单元/节点。addr@realm.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(); } }
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();
2条答案
按热度按时间kyxcudwk1#
使用kerberos,一切都会变得更复杂。
任何jdbc代码之前的配置:
进口:
初始化配置代码:
然后您可以获得连接:
配置单元jdbc驱动程序的maven依赖关系
islocalrun()=这取决于是在计算机中运行还是直接在集群上运行
在集群上运行时,需要为所有配置添加hive-site.xml(它可以是与本例中不同的路径)
从本地使用jdbc连接字符串进行外部集群连接
vm0i2vca2#
我认为kerbrose实现是一个非常庞大的概念,对于一个小任务来说,完成它可能会非常耗时。
这是你的问题的快速解决方法!
要在安全环境中访问配置单元,请考虑以下事项:
-要访问hive,您需要提供特定于该hive版本的所有jar,如hive官方网站上的列表所示。
-接下来提供特定于配置单元版本的驱动程序名,例如,对于配置单元server2“org.apache.hive.jdbc.hivedriver”
-提供配置单元连接url,例如。jdbc:hive2://节点。addr:10000/default;主体=配置单元/节点。addr@realm.local
我们在连接url中提供了连接地址和安全认证。对于kerberos,将有身份验证字符串,这是我们在kerberos实现时设置的kerberos原则。
此字符串与我们使用beeline(例如beeline-u)连接到配置单元服务器时提供的字符串相同jdbc:hive2://节点。addr:10000/default;主体=配置单元/节点。addr@realm.local"
下面是一个小代码: