我正在提交一个yarn集群模式下的pyspark应用程序,并希望执行可以将日志写入可访问位置的应用程序日志记录。我尝试了两种应用程序登录方式:
使用python日志模块-这在yarn客户机模式下工作,我可以将应用程序日志写入边缘节点上的物理位置。但是在集群模式下,由于驱动程序不是从edgenode执行的,所以我的应用程序日志无法写入指定的日志位置。尽管在spark ui的驱动程序日志中,应用程序日志非常清晰,格式与logger属性中的配置一致。所以我所需要的就是在应用程序退出后将它们正式写入hdfs或物理位置。但不知道怎么做。
使用spark的log4j-我可以从sparkcontext检索记录器,如:
log4jLogger = sc._jvm.org.apache.log4j
log = log4jLogger.LogManager.getLogger(__name__)
在使用这个记录器进行应用程序日志记录时,日志语句会与spark自己的日志混淆,并打印在控制台上。因为我没有编辑spark安装的log4j文件的权限,所以我创建了一个带有文件appender和所有相关属性的定制log4j配置文件,并通过spark submit命令--file、spark.executor.extrajavaoptions和spark.driver.extrajavaoptions传递了它。但对于scala应用程序来说,这似乎是一种非常特殊的方法,因为在设置了这些选项之后,命令开始期望--class属性是scala特有的。
我还没弄明白。任何指点都将不胜感激。
暂无答案!
目前还没有任何答案,快来回答吧!