我正在尝试使用emr集群上的beeline(启用kerberos)连接到hive,我想知道为什么要运行kinit(使用我的用户帐户),然后执行以下操作:
beeline -u "jdbc:hive2://localhost:10000/default;principal=hive/_HOST@REALM"
使我困惑的是上面的校长。为什么要用“principal=hive/_host@realm“(我读到的是配置单元服务主体)当我使用上一个命令中的kinit对我的用户帐户进行身份验证时?
我将对配置单元服务主体或我的用户帐户运行查询吗?使用beeline时,是否所有用户都使用配置单元服务主体?这背后有什么原因吗?
用于进一步上下文的链接:使用kerberos keytab通过直线连接到配置单元
1条答案
按热度按时间ztmd8pv51#
这个
principal=
jdbcurl上的选项实际上引用了服务主体(spn),即您需要连接的对象。无可否认,这是含糊不清的。kinit
验证用户主体(upn),创建一个“票证授予票证”(tgt),并将其转储到票证缓存中。稍后,jdbc客户机(或http客户机,或hive metastore java客户机,或hdfs java客户机,无论什么)将使用tgt在适当的主机上请求适当服务类型的服务票证;出于某种原因,java从不将服务票证放在缓存中(不像
curl
或者python,它使用c库,比如kinit
).SPN通常在名为
***-site.xml
由hadoop客户机库使用。但是。。。jdbc驱动程序应该是独立的,不依赖于外部lib或配置文件,并从url获取其所有连接参数。这就是为什么你必须在你的url上显式地填充spn。嗯。