无法停止Kerberos调试日志记录

时间:2019-11-08 08:32:43

标签: java apache-spark kerberos

我正在使用启用Kerberos的Spark集群来运行我们的Spark应用程序。 Kerberos是由组织的其他成员先前设置的,我不知道它是如何工作的。在最初的几天里,我们使用Kerberos调试日志来了解“无法从用户获取密码”异常,该异常是由于jre security的cacerts文件夹中缺少JCE证书而引发的。但是,我们不再需要日志,因此使用了-Dsun.security.krb5.debug = false参数来禁用日志记录。但是,这没有任何作用。还有其他参数可以解决问题吗?请帮助我。

1 个答案:

答案 0 :(得分:1)

GitBook摘录 Steve Loughran的“ Hadoop和Kerberos:门外的疯狂” Low-Level Secrets < / p>

  

JVM库日志记录

     

您可以在
-Dsun.security.krb5.debug=true

上启用Kerberos低级日志记录      

这不是通过Log4J或java.util日志记录出来的;它来了   在控制台上。这有点不方便-但请记住   他们正在系统的非常低级的部分进行日志记录。它确实   至少日志。如果您发现自己处于这个水平,那您就处于   麻烦。记住这一点。

     

如果要调试SPNEGO中发生的情况,请使用其他系统   属性可让您启用此功能:
-Dsun.security.spnego.debug=true

     

您可以在HADOOP_OPTS环境变量中同时要求它们
  export HADOOP_OPTS="-Dsun.security.krb5.debug=true -Dsun.security.spnego.debug=true"

     

Hadoop端JAAS调试

     

将环境变量HADOOP_JAAS_DEBUG设置为true,然后UGI将设置   它创建的任何JAAS文件上的“调试”标志。

     

您可以在发出Hadoop,HDFS或Yarn之前在客户端上执行此操作   命令,并将其在YARN服务的环境脚本中设置为   打开那里。
  export HADOOP_JAAS_DEBUG=true

     

在下一个Hadoop命令上,您将看到类似(.........)

注意事项:以sun.security.开头的Java属性适用于Sun / Oracle Java运行时以及OpenJDK运行时及其变体。但不适用于IBM Java等。


摘录自 Troubleshooting Security

下的 Java 8文档
  

如果要监视安全性访问,可以设置   java.security.debug系统属性。
  (.......)用逗号分隔多个选项。

在专门对Kerberos进行故障排除时,我个人使用了该组合:
-Djava.security.debug=gssloginconfig,configfile,configparser,logincontext


摘录自Oracle JDK 9 Release Notes 部分工具/启动器

  

JDK 9支持新的环境变量JDK_JAVA_OPTIONS   将选项添加到命令行上指定的选项之前。新的   环境变量相对于   旧版/不受支持的_JAVA_OPTIONS环境变量,包括   能够包含Java启动器选项(...)

这两个env变量是一种非常脏的(而且很难检测)的方式,可以在不将它们出现在命令行中的情况下注入Java系统属性。


这对您意味着什么?好吧,您必须搜索多个Java系统属性和环境变量,可以将其设置为

  • 用于环境变量:全局(参见/etc/profile.d/*.sh),帐户级别(参见~/.bashrc和朋友),Hadoop“包含文件”内部或直接在运行的Shell脚本内部您的Spark工作
  • 对于系统道具:在以后在shell脚本(...)或Java在启动时选择的任何env var或YARN配置文件中开发的任何shell-or-env变量中(使用(Yarn上的Spark),或直接在Java命令行上

祝你好运。
我个人将运行一个虚拟的Spark作业,该作业只会转储所有env变量和Java系统道具;然后检查转储以检测要搜索的内容;然后在Linux文件系统(根据需要重复)上运行强力find ... -exec grep ...