Log4j 在多个节点中创建日志。想在一个节点创建单个日志
Log4j creating logs in multiple nodes. Want to create a single log in one node
我有一个多节点集群 Spark 集群。我正在使用 log4j 创建日志。正在创建日志,但集群中的所有节点都在创建日志。它们也在 /tmp 目录中创建,而不是在任何其他目录中。这是
spark2-submit --master yarn --deploy-mode cluster --files /path/log4j.properties --conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=log4j.properties" --conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=log4j.properties" --class com.dataLoad.Load_WF /path/LoadData.jar
如何将所有日志附加到一个日志文件而不是多个日志中?
如何在 Linux 中的 /tmp 目录以外的目录中创建日志?
示例代码将非常有助于理解。
非常感谢。
在多节点 spark 集群上,您的应用程序的日志由 spark 驱动程序写入。
如果在节点A上以client方式执行,日志会保存在节点上
A
如果使用集群模式执行,日志将保存在节点所在的节点上
火花驱动器是 运行.
我们遇到了同样的问题,我们找到的解决方案是使用 syslog 来集中每个节点的日志,对于我们在同一节点上的所有应用程序。
在主节点上,您必须将系统日志配置为日志服务器。
在 /etc/syslog-ng/ 中,您必须编辑 syslog-ng.conf 以创建用于保存集中日志文件的目的地,:
示例:
@version: 3.5
@include "scl.conf"
@include "`scl-root`/system/tty10.conf"
options {
time-reap(30);
mark-freq(10);
keep-hostname(yes);
};
source s_local { system(); internal(); };
source s_network {
syslog(transport(udp) port(514));
};
destination df_local2 {
file(
"/var/log/MyClusterLogs/myAppLogs.$YEAR-$MONTH-$DAY.log"
owner("user")
group("user")
perm(0777)
); };
filter f_local2 { facility(local2); };
log { source(s_network); filter(f_local2); destination(df_local2); };
然后,将 spark 应用程序的 log4j.properties 文件中的配置更改为指向系统日志服务器:
log4j.rootCategory=INFO,FILE,SYSLOG
log4j.appender.SYSLOG=org.apache.log4j.net.SyslogAppender
log4j.appender.SYSLOG.syslogHost=<syslog_server_ip>
log4j.appender.SYSLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.SYSLOG.layout.conversionPattern=%d{ISO8601} %-5p [%t] %c{2} %x - %m%n
log4j.appender.SYSLOG.Facility=LOCAL2
我有一个多节点集群 Spark 集群。我正在使用 log4j 创建日志。正在创建日志,但集群中的所有节点都在创建日志。它们也在 /tmp 目录中创建,而不是在任何其他目录中。这是
spark2-submit --master yarn --deploy-mode cluster --files /path/log4j.properties --conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=log4j.properties" --conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=log4j.properties" --class com.dataLoad.Load_WF /path/LoadData.jar
如何将所有日志附加到一个日志文件而不是多个日志中? 如何在 Linux 中的 /tmp 目录以外的目录中创建日志? 示例代码将非常有助于理解。 非常感谢。
在多节点 spark 集群上,您的应用程序的日志由 spark 驱动程序写入。
如果在节点A上以client方式执行,日志会保存在节点上 A
如果使用集群模式执行,日志将保存在节点所在的节点上 火花驱动器是 运行.
我们遇到了同样的问题,我们找到的解决方案是使用 syslog 来集中每个节点的日志,对于我们在同一节点上的所有应用程序。
在主节点上,您必须将系统日志配置为日志服务器。 在 /etc/syslog-ng/ 中,您必须编辑 syslog-ng.conf 以创建用于保存集中日志文件的目的地,:
示例:
@version: 3.5
@include "scl.conf"
@include "`scl-root`/system/tty10.conf"
options {
time-reap(30);
mark-freq(10);
keep-hostname(yes);
};
source s_local { system(); internal(); };
source s_network {
syslog(transport(udp) port(514));
};
destination df_local2 {
file(
"/var/log/MyClusterLogs/myAppLogs.$YEAR-$MONTH-$DAY.log"
owner("user")
group("user")
perm(0777)
); };
filter f_local2 { facility(local2); };
log { source(s_network); filter(f_local2); destination(df_local2); };
然后,将 spark 应用程序的 log4j.properties 文件中的配置更改为指向系统日志服务器:
log4j.rootCategory=INFO,FILE,SYSLOG
log4j.appender.SYSLOG=org.apache.log4j.net.SyslogAppender
log4j.appender.SYSLOG.syslogHost=<syslog_server_ip>
log4j.appender.SYSLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.SYSLOG.layout.conversionPattern=%d{ISO8601} %-5p [%t] %c{2} %x - %m%n
log4j.appender.SYSLOG.Facility=LOCAL2