当使用beeline连接到启用了Kerberos的EMR群集上的Hive时,为什么要使用Hive服务主体?

时间:2019-02-09 03:45:26

标签: hadoop hive kerberos amazon-emr beeline

我正在尝试使用EMR集群(启用Kerberos)上的beeline连接到Hive,并且想知道为什么要运行kinit(使用我的用户帐户),然后执行以下操作:

beeline -u "jdbc:hive2://localhost:10000/default;principal=hive/_HOST@REALM"

令我困惑的部分是上面的原理。当我在上一个命令中使用kinit对用户帐户进行身份验证时,为什么我们使用“ principal = hive / _HOST @ REALM”(从我的阅读中是Hive服务主体)?

我将针对Hive服务主体还是我的用户帐户运行查询?使用Beeline时是否所有用户都使用Hive服务主体?这背后有什么原因吗?

进一步的上下文链接:Connecting to Hive via Beeline using Kerberos keytab

1 个答案:

答案 0 :(得分:0)

JDBC URL上的

principal= 选项实际上是指服务主体(SPN),即您需要连接的内容。公认的模棱两可和令人困惑。

kinit对您的用户主体(UPN)进行身份验证,从而创建一个“票证授予票证”(TGT),并将其转储到票证缓存中。
稍后,JDBC客户端(或HTTP客户端,Hive Metastore Java客户端或HDFS Java客户端,无论如何)将使用TGT来为适当的服务类型请求服务票证在适当的主机上;出于某种原因,Java从未将服务票证放入缓存中(不同于curl或Python,后者使用的是C库,例如kinit)。

SPN通常在名为***-site.xml的Hadoop配置文件中定义,由Hadoop客户端库使用。
但是... JDBC驱动程序应该是独立的,不依赖于外部库或配置文件,并且可以从URL获取其所有连接参数。这就是为什么您必须在URL上显式填充SPN的原因。 h