我试图连接使用EMR集群上直线(启用了Kerberos)来撵,我想知道为什么我会跑的kinit(使用我的用户帐户),然后执行以下操作:
beeline -u "jdbc:hive2://localhost:10000/default;principal=hive/_HOST@REALM"
这让我困惑的部分是上面的校长。为什么要使用“主要=蜂巢/ _HOST @ REALM”(从我读过的是蜂巢服务主体),当我与使用中的kinit前一个命令我的用户帐户验证?
我将运行针对蜂巢服务主体或我的用户帐户的查询?是不是所有的用户在使用时,径直使用Hive服务主体?没有任何理由的背后呢?
链接进行进一步的上下文:Connecting to Hive via Beeline using Kerberos keytab
对JDBC URL的principal=
选项实际上指的是服务主体(SPN),即你需要连接到什么。这是无可否认的暧昧和混乱。
kinit
验证用户主体(UPN),开创了“票证授予票证”(TGT),这是在票证缓存倾倒。
后来JDBC客户端(或HTTP客户端,或蜂巢Metastore Java客户端,或HDFS Java客户端,其他)将使用TGT来请求服务票证适当的主机上相应的服务类型;出于某种原因的Java从来没有把在高速缓存中(不像curl
或Python,它使用C库,像kinit
),其服务票证。
的SPN是在名为***-site.xml
Hadoop配置文件,这是由Hadoop的客户端库消耗通常定义。
但是...... JDBC驱动程序应该是独立的,不会对外部库或配置文件的依赖性,并获得来自URL所有连接PARAMS。这就是为什么你必须明确的东西上SPN您的网址。咄。