apache-spark - 为什么 getKerberosTransport 需要 3 部分 kerborse 原则?
问题描述
早上好/下午/晚上好!
Spark 2.4.x,带有 Hive 1.2.1
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 个部分......
谢谢!
解决方案
Kerberos 主体的三个部分是{service}/{name}[@{realm}]
. 所以例如host/server.domain.com@realm.com
或host/server.domain.com
。客户端依赖此信息来确定 Kerberos KDC 的位置,以便它可以请求票证。server.realm.com
如果名称以领域名称结尾(例如),则领域部分通常是可选的。在这种情况下,客户只是在明确说明它。
我不知道为什么作者选择要求所有三个。它确实使客户端实现更容易,因为您不必猜测意图,但它以牺牲 API 的简单性为代价。
推荐阅读
- mongodb - 我收到错误 MongooseError: Operation `products.find()` buffering timed out after 10000ms AND error: [MongoNetworkError]
- python-3.x - 减去日期时间(格式 %h %m %s)
- ansible - Ansible 在本地打印远程配置
- .net - ThrottleUnderLoad 的 IIS 工作进程 CPU 限制
- haskell - 根据映射到列表的函数的结果过滤列表。哈斯克尔
- c# - .NET 5 Razor Page OnGet() 未触发
- outlook - Outlook IMAP 搜索未使用 BODY 搜索条件返回正确的值
- git - 使用 GPG 对 git 提交进行签名时,究竟在签名什么?
- next.js - Next.js 快速刷新自定义动画
- bitcoin - 在远程节点或本地节点上运行 getblocktemplate 而不同步