合并Spark日志

时间:2014-04-28 18:52:58

标签: log4j apache-spark

我希望能够获得我的火花工作的综合视图。

我在创建RDD的机器上使用log4j,并且分发的各种作业也使用log4j。最终得到一个本地日志文件,然后在作业分发到的每个节点上记录日志文件。

是否有一些内置方法可以将所有这些日志组合在一起?必须同时查看服务器机器+每个节点都很痛苦。

我看了一下,可能有两种选择:

  1. 使用JobLogger之类的东西(使用Spark Listener)。
  2. 使用套接字appender或Flume
  3. 之类的东西

    每个人在处理分布式日志方面的经验是什么?

2 个答案:

答案 0 :(得分:0)

如果你真的想要这个,你可以尝试将日志放在一些共享目录中,但我不认为这是一个很好的解决方案。我不知道为什么你需要这样的功能 - 来自不同执行器的混合日志并行工作甚至来自不同的应用程序会使你的日志变得非常混乱。

答案 1 :(得分:0)

如果创建记录器并将其与流程一起传递给工作人员,则工作人员可以写入主节点上的统一文件。 Python中的示例(使用显式多重处理):

import logging
from multiprocessing.pool import ThreadPool
LOG_FILENAME = '/home/hadoop/logs/filename.log'    logging.basicConfig(filename=LOG_FILENAME,level=logging.INFO)
logger = logging.getLogger('pyspark')

p = ThreadPool(numNodes)

logDFs = p.map(lambda x: foo(logger, ...), listOfStuff)


def foo(logger, vars):
     #do stuff
     logger.info('This appears in your consolidated log on master.')

在pyspark框架中运行,工作人员负责处理进程,并且功能foo将记录器传递给它。您可以在主节点上的logs文件夹中查看来自工作程序的日志语句。