首页 > 解决方案 > 为什么 getKerberosTransport 需要 3 部分 kerborse 原则?

问题描述

早上好/下午/晚上好!

Spark 2.4.x,带有 Hive 1.2.1

源代码在这里:https ://github.com/apache/spark/blob/master/sql/hive-thriftserver/v1.2/src/main/java/org/apache/hive/service/auth/KerberosSaslHelper.java

 public static TTransport getKerberosTransport(String principal, String host,
    TTransport underlyingTransport, Map<String, String> saslProps, boolean assumeSubject)
    throws SaslException {
    try {
      String[] names = principal.split("[/@]");
      if (names.length != 3) {
        throw new IllegalArgumentException("Kerberos principal should have 3 parts: " + principal);
      }

现在的问题:

有谁知道为什么 spark thrift 服务器需要 3 部分 kerberos 原理?

Spark thrift 服务器通过提交一个长时间运行的作业来工作,这不需要 3 部分 kerberos 原则。

启动一个监听端口的服务,不需要 3 部分的 kerberos 原理(就像 spark 作业历史一样),对吧?

所以想知道为什么这段代码检查原理是否有 3 个部分......

谢谢!

标签: apache-sparkapache-spark-sqlspark-thriftserver

解决方案


Kerberos 主体的三个部分是{service}/{name}[@{realm}]. 所以例如host/server.domain.com@realm.comhost/server.domain.com。客户端依赖此信息来确定 Kerberos KDC 的位置,以便它可以请求票证。server.realm.com如果名称以领域名称结尾(例如),则领域部分通常是可选的。在这种情况下,客户只是在明确说明它。

我不知道为什么作者选择要求所有三个。它确实使客户端实现更容易,因为您不必猜测意图,但它以牺牲 API 的简单性为代价。


推荐阅读