Logging 在Spark RDD处理功能中的何处查找日志?(纱线簇模式)
我正在纱线簇上运行Spark应用程序。无论我做什么,我都无法打印RDD函数中的日志。下面是我为RDD处理函数编写的示例代码段。我简化了代码,以说明我用来编写函数的语法。当我在本地运行它时,我可以看到日志,但不能在集群模式下看到。System.err.println和记录器似乎都不工作。但是我可以看到我所有的驱动程序日志。我甚至尝试使用根日志记录器进行日志记录,但它在RDD处理功能中根本不起作用。我急切地想看到日志消息,所以最后我找到了将日志记录器用作瞬态事件的指南,但没有任何帮助Logging 在Spark RDD处理功能中的何处查找日志?(纱线簇模式),logging,apache-spark,yarn,spark-streaming,Logging,Apache Spark,Yarn,Spark Streaming,我正在纱线簇上运行Spark应用程序。无论我做什么,我都无法打印RDD函数中的日志。下面是我为RDD处理函数编写的示例代码段。我简化了代码,以说明我用来编写函数的语法。当我在本地运行它时,我可以看到日志,但不能在集群模式下看到。System.err.println和记录器似乎都不工作。但是我可以看到我所有的驱动程序日志。我甚至尝试使用根日志记录器进行日志记录,但它在RDD处理功能中根本不起作用。我急切地想看到日志消息,所以最后我找到了将日志记录器用作瞬态事件的指南,但没有任何帮助 class S
class SampleFlatMapFunction implements PairFlatMapFunction <Tuple2<String,String>,String,String>{
private static final long serialVersionUID = 6565656322667L;
transient Logger executorLogger = LogManager.getLogger("sparkExecutor");
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException {
in.defaultReadObject();
executorLogger = LogManager.getLogger("sparkExecutor");
}
@Override
public Iterable<Tuple2<String,String>> call(Tuple2<String, String> tuple) throws Exception {
executorLogger.info(" log testing from executorLogger ::");
System.err.println(" log testing from executorLogger system error stream ");
List<Tuple2<String, String>> updates = new ArrayList<>();
//process Tuple , expand and add it to list.
return updates;
}
};
我的Log4j配置如下所示
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{1}: %m%n
log4j.appender.RollingAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.RollingAppender.File=/var/log/spark/spark.log
log4j.appender.RollingAppender.DatePattern='.'yyyy-MM-dd
log4j.appender.RollingAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.RollingAppender.layout.ConversionPattern=[%p] %d %c %M - %m%n
log4j.appender.RollingAppenderU=org.apache.log4j.DailyRollingFileAppender
log4j.appender.RollingAppenderU.File=${spark.yarn.app.container.log.dir}/spark-app.log
log4j.appender.RollingAppenderU.DatePattern='.'yyyy-MM-dd
log4j.appender.RollingAppenderU.layout=org.apache.log4j.PatternLayout
log4j.appender.RollingAppenderU.layout.ConversionPattern=[%p] %d %c %M - %m%n
# By default, everything goes to console and file
log4j.rootLogger=INFO, RollingAppender, console
# My custom logging goes to another file
log4j.logger.sparkExecutor=INFO, stdout, RollingAppenderU
我尝试过纱线日志、Spark UI日志,但在任何地方都看不到RDD处理函数中的日志语句。我尝试了以下方法,但没有成功
yarn logs -applicationId
I checked even below HDFS path also
/tmp/logs/
我通过传递下面的参数来运行spark submit命令,即使它不起作用
--master yarn --deploy-mode cluster --conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=log4j.properties" --conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=log4j.properties"
有人能指导我在spark RDD和map函数中登录吗?我在上述步骤中遗漏了什么 您是否得到纱线日志的任何输出-applicationId命令,理想情况下应该是这样的work@shekhar,是的,我正在获取纱线日志的输出-applicationId,但它只包含驱动程序日志,不包含RDD处理函数的日志检查executor节点上是否存在log4j.properties,还要指定log4j.properties文件的完整路径。@shekhar,是的,log4j.properties存在于executor节点,甚至在executor节点上创建RollingAppender文件。此外,RollingAppenderU文件也在创建中,我可以在hadoop UI的应用程序日志部分看到它。我无法在这些文件中看到RDD log语句。@a可能您已经解决了这个问题,我面临着一个类似的问题,我希望看到RDD映射循环中的日志消息。您是否获得了纱线日志的任何输出-applicationId命令,理想情况下应该是这样的work@shekhar ,是的,我正在获取纱线日志的输出-applicationId,但它只包含驱动程序日志,不包含RDD处理函数中的日志检查executor节点上是否存在log4j.properties,同时指定log4j.properties文件的完整路径。@shekhar,是的,log4j.properties存在于executor节点上,实际上它甚至在executor节点上创建了RollingAppender文件。此外,RollingAppenderU文件也在创建中,我可以在hadoop UI的应用程序日志部分看到它。我无法看到这些文件中的RDD日志语句。@a可能您已经解决了这个问题,我面临着类似的问题,我希望看到RDD映射循环中的日志消息。