Hadoop 在使用beeline连接到启用Kerberos的EMR集群上的配置单元时,为什么要使用配置单元服务主体?

Hadoop 在使用beeline连接到启用Kerberos的EMR集群上的配置单元时,为什么要使用配置单元服务主体?,hadoop,hive,kerberos,amazon-emr,beeline,Hadoop,Hive,Kerberos,Amazon Emr,Beeline,我正在尝试使用EMR集群(启用Kerberos)上的直线连接到Hive,我想知道为什么要运行kinit(使用我的用户帐户),然后执行以下操作: beeline -u "jdbc:hive2://localhost:10000/default;principal=hive/_HOST@REALM" 让我困惑的是上面的校长。为什么我们使用“主体=蜂巢”/_HOST@REALM(我读到的是配置单元服务主体)当我在上一个命令中使用kinit对我的用户帐户进行身份验证时 我将对配置单元服务主体或我的用户

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

beeline -u "jdbc:hive2://localhost:10000/default;principal=hive/_HOST@REALM"
让我困惑的是上面的校长。为什么我们使用“主体=蜂巢”/_HOST@REALM(我读到的是配置单元服务主体)当我在上一个命令中使用kinit对我的用户帐户进行身份验证时

我将对配置单元服务主体或我的用户帐户运行查询吗?当使用beeline时,是否所有用户都使用配置单元服务主体?这背后有什么原因吗

进一步上下文链接:

该JDBC URL上的
主体=
选项实际上指的是服务主体(SPN),即您需要连接的对象。无可否认,这是模棱两可和令人困惑的

kinit
验证您的用户主体(UPN),创建“票证授予票证”(TGT),并将其转储到票证缓存中。
稍后,JDBC客户机(或HTTP客户机,或Hive Metastore Java客户机,或HDFS Java客户机,无论什么)将使用TGT为适当主机上的适当服务类型请求服务票证;出于某种原因,Java从不将服务票证放在缓存中(不像
curl
或Python,后者使用C库,比如
kinit

SPN通常在Hadoop客户端库使用的名为
***-site.xml
的Hadoop配置文件中定义。

但是…JDBC驱动程序应该是独立的,不依赖于外部lib或配置文件,并且从URL获取其所有连接参数。这就是为什么您必须在URL上显式填充SPN。Duh.

这是否意味着我将使用配置单元SPN进行连接,但我的查询将针对已通过身份验证的用户帐户运行?否(如果我正确理解您所说的“使用”是什么意思)。作为UPN连接到SPN。是或否,您的查询将在您的UPN或配置单元服务帐户下运行,但使用您的privs--这取决于HiveServer2使用的安全模型(例如,在CDH中,Sentry强制执行第二种方法)