首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Kerberos:星星之火UGI证书不会传给蜂巢

Kerberos:星星之火UGI证书不会传给蜂巢
EN

Stack Overflow用户
提问于 2020-04-22 01:50:14
回答 1查看 628关注 0票数 1

我使用的是Spark2.4,我有一个启用Kerberos的集群,在这里我试图通过spark-sql shell运行一个查询。

简化的设置基本如下所示: shell运行在Yarn集群中的一个主机上,->外部单元-亚稳态运行一个主机-> S3来存储表数据。

当我启动启用调试日志记录的spark-sql shell时,我在日志中看到了以下内容:

代码语言:javascript
运行
复制
> bin/spark-sql --proxy-user proxy_user

...
DEBUG HiveDelegationTokenProvider: Getting Hive delegation token for proxy_user against hive/_HOST@REALM.COM at thrift://hive-metastore:9083
DEBUG UserGroupInformation: PrivilegedAction as:spark/spark_host@REALM.COM (auth:KERBEROS) from:org.apache.spark.deploy.security.HiveDelegationTokenProvider.doAsRealUser(HiveDelegationTokenProvider.scala:130)

这意味着斯派克打了个电话,从蜂巢转移处拿出委托令牌,然后把它添加到UGI的凭证列表中。火星城的这是一段代码就是这么做的。我还在亚稳态日志中证实了get_delegation_token()通话正在进行中。

现在,当我运行像create table test_table (id int) location "s3://some/prefix";这样的简单查询时,就会遇到AWS凭据错误。我修改了单元转移代码,并在初始化Hadoop中的文件系统(org/apache/hadoop/hive/metastore/Warehouse.java)之前添加了这个代码:

代码语言:javascript
运行
复制
 public static FileSystem getFs(Path f, Configuration conf) throws MetaException {
...
    try {
      // get the current user 
      UserGroupInformation ugi = UserGroupInformation.getCurrentUser();
      LOG.info("UGI information: " + ugi);
      Collection<Token<? extends TokenIdentifier>> tokens = ugi.getCredentials().getAllTokens();
      // print all the tokens it has 
      for(Token token : tokens) {
        LOG.info(token);
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
...
}

在亚稳态日志中,这确实打印了正确的UGI信息:

代码语言:javascript
运行
复制
UGI information: proxy_user (auth:PROXY) via hive/hive-metastore@REALM.COM (auth:KERBEROS)

但是在UGI中没有任何标记。看起来像火花码用别名hive.server2.delegation.token添加了它,但是我在UGI中没有看到它。这让我怀疑UGI的作用域是孤立的,不能在spark和蜂巢转移之间共享。我该怎么解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-23 16:30:47

星星之火没有获取您的Kerberos标识,-it要求每个FS发出一些“委托令牌”,让调用者单独与该服务和该服务进行交互。这更受限制,也更安全。

这里的问题是,spark从每个文件系统收集委托令牌,这些令牌可以发出-and,因为您的S3连接器没有发出任何令牌,也没有下降的迹象。

现在,可以将ApacheHadoop3.3.0的S3A连接器设置为在委托令牌内发出AWS凭据,或者为了额外的安全性,请AWS提供会话凭据,然后只发送这些凭据。但是(a)您需要一个带有这些依赖项的星星之火构建,以及(b) Hive需要使用这些凭据与S3对话。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61355997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档