当前位置: 首页 > 面试题库 >

来自PyExecutor的Spark日志记录

酆出野
2023-03-14
问题内容

使用pyspark on访问Spark的log4j记录器的正确方法是什么
遗嘱执行人?
在驱动程序中这样做很容易,但我似乎不明白如何访问
executor上的日志记录功能,以便我可以在本地进行日志记录并
纱线收集当地的原木。
有什么方法可以访问本地记录器吗?
标准的日志记录过程是不够的,因为我无法访问spark
执行器的上下文。


问题答案:

不能对执行器使用本地log4j记录器。Python工作人员由
执行器jvm没有到java的“回调”连接,它们只是接收
命令。但是有一种方法可以使用标准python从执行者那里进行日志记录
伐木并用纱线捕捉它们。
在HDFS上,将每个python配置一次日志记录的python模块文件放入其中
worker和proxy日志记录函数(命名为logger.py):

import os
import logging
import sys

class YarnLogger:
    @staticmethod
    def setup_logger():
        if not 'LOG_DIRS' in os.environ:
            sys.stderr.write('Missing LOG_DIRS environment variable, pyspark logging disabled')
            return

        file = os.environ['LOG_DIRS'].split(',')[0] + '/pyspark.log'
        logging.basicConfig(filename=file, level=logging.INFO, 
                format='%(asctime)s.%(msecs)03d %(levelname)s %(module)s - %(funcName)s: %(message)s')

    def __getattr__(self, key):
        return getattr(logging, key)

YarnLogger.setup_logger()

然后在应用程序中导入此模块:

spark.sparkContext.addPyFile('hdfs:///path/to/logger.py')
import logger
logger = logger.YarnLogger()

您可以在pyspark函数内部使用,例如普通的日志记录库:

def map_sth(s):
    logger.info("Mapping " + str(s))
    return s

spark.range(10).rdd.map(map_sth).count()

pyspark.log日志将在资源管理器上可见并将在上收集
应用程序完成,这样以后可以使用’yarn logs访问这些日志
-应用程序ID….`。



 类似资料:
  • 我正在寻找一种解决方案,能够在Apache Spark节点上执行代码时记录额外的数据,这有助于调查稍后在执行过程中可能出现的一些问题。尝试使用传统的解决方案,例如失败,因为无法在Apache Spark这样的分布式环境中序列化日志实例。 我已经研究了这个问题,现在我发现的解决方案是使用特性如下: 然而,日志特性似乎不是Apache Spark的永久解决方案,因为它被标记为,并且类留档提到: 这可能

  • 我试图建立一个应用程序,使用log4j使日志文件。日志文件的位置通过log4j.properties文件提供。 到目前为止,它运行良好,但我想将spark日志与我从代码生成的日志分开。或者至少在日志文件中打印我的日志消息。 有办法吗? log4j.properties

  • 从其他问题中,我发现WebSphere和Spark都在内部使用SLF4J。如何防止Spark中的SLF4J通过自身重定向来自其他应用程序的所有日志记录? 我使用的是WebSphere Application Server V8.5.5.6和Apache Spark V1.4.1 CHD4二进制发行版。

  • 将PostSharp用于C#应用程序,我有以下场景: Namespace_ACustomLoggingMethod Namespace_B.DoThings thingMethod(实际上是几种不同的方法) DoMomthingMethod调用CustomLoggingMethod,它以所需的格式创建日志条目并且运行良好。正如预期的那样,日志条目将源记录为CustomLoggingMethod,我

  • 我想在我的应用程序中使用SLF4J+logback用于两个目的--日志和审计。 14:41:57.978[main]信息AUDIT_LOGGER-110欢迎使用main 如何确保审核消息在审核记录器下只出现一次?

  • 问题内容: 我正在考虑将Redis用于Web应用程序日志记录目的。我用谷歌搜索,有人将日志转储到Redis队列/列表中,然后将计划的工作人员转储到磁盘中。 http://nosql.mypopescu.com/post/8652869828/another-redis-use-case- centralized-logging 我希望寻求理解,为什么不直接使用Redis持久化到磁盘?如果我分配了一