Oozie Java Action使用委托令牌访问Hive Server 2(Kerberized)

use*_*737 0 hive delegation token oozie

目前我遇到一个问题确实需要一些帮助.我们正在尝试对我们的hadoop集群进行kerberize,包括hive server2和oozie.我的oozie作业在数据节点中旋转了一个java动作,试图连接到kerberized hive服务器2.没有用户的kerberos keytab进行身份验证.所以我只能在java动作中使用oozie传递的委托令牌连接到hive服务器2.我的问题是:有没有办法在oozie java动作中使用委托令牌连接到hive服务器2?如果是这样,我怎么能通过hive JDBC做到这一点?谢谢贾里

Sam*_*ter 6

在kerberized集群中使用Oozie时......

  • 对于"Hive"或"Pig"动作,您必须配置HCat<credentials>类型
  • 对于"Hive2"操作(刚刚与V4.2一起发布),您必须配置 Hive2<credentials>类型
  • 对于打开与HiveServer2的自定义JDBC连接的"Java"操作,我担心Oozie无法帮助- 除非有一个无证件的黑客可以重用这个新的Hive2凭证吗?!?

参考:有关Kerberos凭据的 Oozie 文档

AFAIK你不能使用HiveServer2的Hadoop委托令牌.HS2使用Thrift管理客户端连接,Thrift支持Kerberos; 但是Hadoop委托代币是不同的(Kerberos从未用于分布式计算,需要一种解决方法)

您可以做的是在"Java"操作中提供一整套GSSAPI配置,包括keytab.它有效,但有一些警告:

  1. Hadoop Auth库似乎是以非常蹩脚的方式在本地票证缓存上硬连线; 如果你必须连接到HDFS和HiveServer2,那么先做HDFS,因为只要JDBC根据你的自定义配置启动自己的票证,Hadoop Auth就会被破坏
  2. Kerberos配置很棘手,GSSAPI配置更糟糕,而且由于这些是安全功能,因此设计错误信息并不是很有帮助(告诉黑客为什么他们的入侵企图被拒绝会很糟糕)
  3. 尽可能使用OpenJDK; 默认情况下,Sun/Oracle JVM在加密方面存在限制(因为美国出口政策愚蠢和过时),因此您必须下载2个具有"无限强度"加密设置的JAR来替换默认设置

参考:我发现另一个StackOverflow帖子在连接到HiveServer2时非常有助于设置"原始"Kerberos身份验证; 加上一个关于调试GSSAPI配置的非常有用的"跟踪标志"的链接,例如

-Djava.security.debug=gssloginconfig,configfile,configparser,logincontext
Run Code Online (Sandbox Code Playgroud)

最后警告:Kerberos是黑魔法.它会吸走你的灵魂.更具有说服力的是,它会让你失去很多工作日来讨论神秘的配置问题,团队士气会受到影响.我们去过那儿.