我想将Oozie与需要使用Kerberos的Java Action一起使用。 我在HDFS中有我的keytab。我怎么能说该文件是在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");
,但它不起作用。
答案 0 :(得分:1)
Hadoop委托代币仅适用于YARN和HDFS,它们将在7天后过期。对于所有其他服务 - 尤其是HBase(通过ZooKeeper),HiveServer2(直接或通过ZooKeeper),Hive Metastore(在Hive CLI中) - 您需要直接进行身份验证。对于长时间运行的服务,您需要定期重新进行身份验证以续订委派令牌(如果您依赖Slider,它会自动为您执行此操作)
选项1 :要求Oozie为您的操作生成相应的<credential>
。我希望它能够开箱即用和/或更好地记录下来 - Hive就像一个魅力; HBase不是这样;从未尝试过Hive2所以我无法确定。
选项2 :要求Oozie从HDFS 下载您的自定义密钥表文件(您负责限制对该密钥表的访问,不是吗?)使用<file>
选项启动Launcher容器的CWD,然后自己生成凭据。
使用Java操作,它将是选项2。