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);
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"
下面是一个小代码: