停止 hive 的 RetryingHMSHandler 记录到 databricks 集群

Man*_*rki 3 log4j slf4j apache-spark azure-databricks

我正在使用 azure databricks 5.5 LTS 以及 Spark 2.4.3 和 scala 2.11。几乎每个发送到 databricks 集群的请求都会出现以下错误日志

ERROR RetryingHMSHandler: NoSuchObjectException(message:There is no database named global_temp)
at org.apache.hadoop.hive.metastore.ObjectStore.getMDatabase(ObjectStore.java:487)
at org.apache.hadoop.hive.metastore.ObjectStore.getDatabase(ObjectStore.java:498)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
Run Code Online (Sandbox Code Playgroud)

虽然这不会影响我们正在尝试做的事情的最终结果,但我们的日志不断充满这些内容,并且浏览起来并不是很愉快。我尝试通过将以下属性设置为驱动程序和执行程序来关闭它

log4j.level.org.apache.hadoop.hive.metastore.RetryingHMSHandler=OFF
Run Code Online (Sandbox Code Playgroud)

只是后来才意识到 RetryingHMSHandler 类实际上使用 slf4j 记录器,有没有一种优雅的方法来克服这个问题?

小智 5

也许晚了,但 Databricks 集群 9.1 LTS(Apache Spark 3.1.2、Scala 2.12)也面临同样的问题。通过使用添加以下两个属性的初始化脚本来解决

log4j.logger.org.apache.hadoop.hive.metastore.RetryingHMSHandler=FATAL, publicFile
log4j.additivity.org.apache.hadoop.hive.metastore.RetryingHMSHandler=false
Run Code Online (Sandbox Code Playgroud)

到驱动程序的 log4j.properties。

我的目标是从可从作业 UI 下载的“log4j-active.log”文件中删除所有详细日志。通过关注https://learn.microsoft.com/en-us/azure/databricks/kb/clusters/overwrite-log4j-logs,我决定在驱动程序的 log4j.properties 中添加/覆盖一些属性值(首先我看了一下当然,就其内容而言)。

添加了这两个属性,我还能够删除 RetryingHMSHandler (唯一仍然存在的第三方日志调用)

希望能帮助到你 ;)