databricks 无法解析自定义日志附加程序

databricks unable to resolve custom log appender

我正在尝试将日志从 databricks 集群发送到 LogDNA,为此我确实有一个自定义附加程序,在我可以看到日志过来的意义上,它与单元测试配合得很好。但是现在,当我尝试按照 this 的指导将它与 Databricks 集成时,databricks 无法解析 classPath。我正在加载到集群中的初始化脚本如下所示:

#!/usr/bin/env bash

echo "Executing on Driver: $DB_IS_DRIVER"
if [[ $DB_IS_DRIVER = "TRUE" ]]; then
LOG4J_PATH="/home/ubuntu/databricks/spark/dbconf/log4j/driver/log4j.properties"
else
LOG4J_PATH="/home/ubuntu/databricks/spark/dbconf/log4j/executor/log4j.properties"
fi
echo "log4j path : $LOG4J_PATH"
echo "log4j.rootLogger=INFO, LogDNAAppender, console" >> ${LOG4J_PATH}
echo "log4j.appender.LogDNAAppender=tools.logdna.util.LogDNAAppender" >> ${LOG4J_PATH}
echo "log4j.appender.LogDNAAppender.name=LogDNAAppender" >> ${LOG4J_PATH}
// and then properties associated with the appender

此脚本(到初始化脚本)和依赖项已成功上传到集群,但在运行时出现错误:

log4j:ERROR Could not instantiate class [tools.logdna.util.LogDNAAppender].
java.lang.ClassNotFoundException: tools.logdna.util.LogDNAAppender

有什么我遗漏或需要完成这项工作的吗?

logback-logdna 添加到 Databricks 的 class 路径,这将有助于 Classloader 定位和加载 LogDNAAppender class.

Download logback-logdna

这里的问题是,我正在将依赖项上传到 databricks 集群中的库,这对我所有的案例来说都足够了,但显然不适用于初始化脚本,它在主机中 /databricks/jars (我没有那些罐子)在运行时查找导致 ClassNotFoundException。解决方法是将这些罐子放在正确的文件夹中,即 /databricks/jars.