我正在使用启用Kerberos的Spark集群来运行我们的Spark应用程序。 Kerberos是由组织的其他成员先前设置的,我不知道它是如何工作的。在最初的几天里,我们使用Kerberos调试日志来了解“无法从用户获取密码”异常,该异常是由于jre security的cacerts文件夹中缺少JCE证书而引发的。但是,我们不再需要日志,因此使用了-Dsun.security.krb5.debug = false参数来禁用日志记录。但是,这没有任何作用。还有其他参数可以解决问题吗?请帮助我。
答案 0 :(得分:1)
GitBook摘录 Steve Loughran的“ Hadoop和Kerberos:门外的疯狂” , Low-Level Secrets < / p>
JVM库日志记录
您可以在
上启用Kerberos低级日志记录
-Dsun.security.krb5.debug=true
这不是通过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等。
下的 Java 8文档
如果要监视安全性访问,可以设置
java.security.debug
系统属性。
(.......)用逗号分隔多个选项。
在专门对Kerberos进行故障排除时,我个人使用了该组合:
-Djava.security.debug=gssloginconfig,configfile,configparser,logincontext
JDK 9支持新的环境变量
JDK_JAVA_OPTIONS
将选项添加到命令行上指定的选项之前。新的 环境变量相对于 旧版/不受支持的_JAVA_OPTIONS
环境变量,包括 能够包含Java启动器选项(...)
这两个env变量是一种非常脏的(而且很难检测)的方式,可以在不将它们出现在命令行中的情况下注入Java系统属性。
/etc/profile.d/*.sh
),帐户级别(参见~/.bashrc
和朋友),Hadoop“包含文件”内部或直接在运行的Shell脚本内部您的Spark工作祝你好运。
我个人将运行一个虚拟的Spark作业,该作业只会转储所有env变量和Java系统道具;然后检查转储以检测要搜索的内容;然后在Linux文件系统(根据需要重复)上运行强力find ... -exec grep ...
。