java - 无法停止 Kerberos 调试日志记录
问题描述
我正在使用启用了 Kerberos 的 Spark 集群来运行我们的 Spark 应用程序。Kerberos 之前已由该组织的其他成员设置,我不知道它是如何工作的。最初,我们使用 Kerberos 调试日志来了解由于 jre 安全的 cacerts 文件夹中没有 JCE 证书而引发的异常“无法从用户获取密码”。但是,我们不再需要日志,因此使用 -Dsun.security.krb5.debug=false 参数来禁用日志记录。但是,这没有任何效果。有没有其他参数可以解决问题?请帮我。
解决方案
摘自Steve Loughran的 GitBook “Hadoop 和 Kerberos:门外的疯狂” ,低级秘密一章
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调试
将 env 变量设置
HADOOP_JAAS_DEBUG
为 true,UGI 将在它创建的任何 JAAS 文件上设置“调试”标志。您可以在客户端执行此操作,然后再发出 hadoop、hdfs 或 yarn 命令,并在 YARN 服务的环境脚本中设置它以在此处打开它。
export HADOOP_JAAS_DEBUG=true
在下一个 Hadoop 命令中,您将看到类似(.........)的跟踪
警告:Java 属性以sun.security.
适用于 Sun/Oracle Java 运行时以及 OpenJDK 运行时及其变体开头。但不适用于 IBM Java 等。
安全性故障排除下的Java 8 文档 节选
如果要监控安全访问,可以设置
java.security.debug
System 属性。
(.......)用逗号分隔多个选项。
在专门对 Kerberos 进行故障排除时,我个人使用该组合:
-Djava.security.debug=gssloginconfig,configfile,configparser,logincontext
Oracle JDK 9 发行说明部分工具/启动器 的摘录
JDK 9 支持一个新的环境变量
JDK_JAVA_OPTIONS
,以将选项附加到命令行上指定的选项。与旧版/不受支持的环境变量相比,新环境变量有几个优点,_JAVA_OPTIONS
包括能够包含 java 启动器选项(...)
这两个 env 变量是一种非常肮脏(并且非常难以检测)的方式来注入 Java 系统属性,而不会出现在命令行上。
这对你意味着什么?好吧,你必须搜索多个 Java 系统 props 和环境变量,这可能是设置的
- 对于环境变量:全局(cf.
/etc/profile.d/*.sh
),或帐户级别(cf.~/.bashrc
和朋友),或在 Hadoop“包含文件”内部,或直接在运行 Spark 作业的 shell 脚本中 - 对于系统道具:在以后在 shell 脚本中开发的任何 shell-or-env 变量中(...)或 Java 在启动时拾取的任何 env var,或在 YARN 配置文件中(使用 Spark-on-YARN 时),或直接在 Java 命令行上
祝你好运。
我个人会运行一个虚拟的 Spark 作业,它只转储所有 env 变量和 Java 系统道具;然后检查转储以检测要搜索的内容;find ... -exec grep ...
然后在 Linux 文件系统上运行蛮力(根据需要重复)。
推荐阅读
- r - 改进创建包的帮助页面
- rest - Jackson 2.x - 扁平化嵌套列表
- r - 通过总和观察修改ggplot中图例的顺序
- c# - 如何在 URL 中隐藏“区域”名称?
- c# - UWP DeviceWatcher 从 Created 跳转到 EnumerationComplete
- javascript - node-cron 仅在间隔时不执行脚本 console.log
- haskell - 持久的“upsert”不起作用
- azure-devops - 在 VSTS 中跨团队项目共享安全文件
- node.js - 使用 npm package 验证包名
- python - 带有 If Else 语句的 Python Tkinter 按钮