java - 从 HDFS 加载 key 表

标签 java hdfs kerberos keytab

我想将 Oozie 与需要使用 Kerberos 的 Java 操作一起使用。 我的 key 表位于 HDFS 中。我怎么能说该文件在 HDFS 中呢?

 Configuration conf = new Configuration();
 conf.set("hadoop.security.authentication", "Kerberos");     
 UserGroupInformation.setConfiguration(conf);
 UserGroupInformation.loginUserFromKeytab(kerberosPrincipal, kerberosKeytab);

我尝试过像 hdfs://xxxx:8020/tmp/myKeytab.keytab 这样的路径,并设置了 conf.set("fs.defaultFS", "hdfs://server:8020"); 也一样,但不起作用。

最佳答案

Hadoop 委托(delegate) token 仅适用于 YARN 和 HDFS,并且会在 7 天后过期。对于所有其他服务——尤其是 HBase(通过 ZooKeeper)、HiveServer2(直接或通过 ZooKeeper)、Hive Metastore(在 Hive CLI 内)——您需要直接进行身份验证。对于长时间运行的服务,您需要定期重新进行身份验证以更新委托(delegate) token (如果您依赖 Slider,它会自动为您执行此操作)

选项 1:要求 Oozie 生成适当的 <credential>为你的行动。我希望它真的能开箱即用和/或有更好的文档记录——Hive 的工作方式就像一个魅力; HBase 则不然;从未尝试过 Hive2,所以我不能确定。

选项 2:要求 Oozie 从 HDFS 下载您的自定义 key 表文件(您负责限制对该 key 表的访问,不是吗???)您的 Launcher 容器的 CWD 为 <file>选项,然后自行生成您的凭据。

对于 Java 操作,它将是选项 2。

关于java - 从 HDFS 加载 key 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35459726/

相关文章:

java - JDBC ResultSet 方法 next() 需要 30 秒才能获取 12000 行

java - 禁用 log4j 日志记录到控制台

Hadoop 分布

apache-spark - 一旦写入最终完成,如何处理 HDFS 目录中的新文件?

security - 如何在不停机的情况下在 Kafka 集群中启用安全性

java - Xml 架构接口(interface)

java - 将字符串拆分为单词和标点符号,但不拆分内部标点符号

mysql - export sqoop 命令出错

java - Java8 中的 Kerberos/SPNEGO 服务器端身份验证更改

python - Anaconda3的python找不到kerberos凭证缓存