我想将 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/