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