我编写了在 hadoop(2.1 或 2.2)上运行的类,作为 hive UDF/UDTF 查询的一部分。最终它作为 Map/Reduce 作业运行。该应用程序执行各种任务,我想根据日志级别添加日志记录。
我想知道这样做的最佳方法(或正确方法)是什么。显然,我不希望日志驻留在未收集的数据节点上的某个文件中。我希望 hadoop 收集日志,以便我们能够从工作跟踪器等中心位置查看所有日志。
选项 1:直接的日志记录解决方案 - 打印到 system.out / system.err 我看到很多论坛都提到打印到系统输出或系统错误,但这意味着开发我们自己的带有调试级别的日志记录机制等......
System.out.println("my log message");
选项 2:使用 hadoop 的 log4j commons logging 其他帖子提到使用 apache commons logging。
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
private static final Log LOG = LogFactory.getLog(MgrsIndexCommon.class);
LOG.trace(“my logging message”);
我使用它,它可以工作,但我没有修改记录器配置文件的权限。我正在考虑在我的应用程序配置文件中添加一个具有日志级别的功能,并从 java 代码中修改日志级别。顺便说一句,我没有在 pom.xml 中添加对 log4j 的依赖项,而是使用了 hadoop 库附带的依赖项。
如果有人使用此选项,那么您是如何配置记录器的?
选项 3: log4j 2 一些架构师提到我们应该考虑添加 log4j 2 依赖项并使用它。在这方面有什么建议吗?如果 hadoop 使用 log4j,我可以带上自己的 log4j 2 并用它来写入 hadoops 日志吗?
在我继续之前,我想看看是否有人有好的建议。
谢谢。