如何在 Hadoop / HDP 组件中配置日志记录?

Posted

技术标签:

【中文标题】如何在 Hadoop / HDP 组件中配置日志记录?【英文标题】:How to configure logging in Hadoop / HDP components? 【发布时间】:2017-01-17 11:02:47 【问题描述】:

我有一个带有以下服务/组件的 HDP 2.4 集群:

    HBase 卡夫卡 MapReduce2 风暴 Oozie Zookeeper、Ambari、Yarn、HDFS 等支持服务

我已经搜索了好几天了,希望能得到一些帮助。我有以下两个问题:

    如何为下面提到的所有服务在应用程序级别(我们使用 log4j)和守护程序级别配置日志记录? 在一个整合位置查看这些服务的所有应用程序级别日志的最佳做法是什么? Ambari 有什么可以提供的,还是我们需要第三方软件包(哪些是好的)?

非常感谢您提供的任何帮助!

【问题讨论】:

【参考方案1】:

如果您正在编写一个利用一个或多个 HDP 服务的应用程序,我建议您更新每个服务的 log4j.properties 文件以匹配您想要的日志记录级别。最好的方法是使用 Ambari Admin UI。要编辑服务的 log4j.properties,请按照以下步骤操作:

    点击仪表板左侧的任一服务。 加载“服务摘要”页面后,单击屏幕顶部的“配置”选项卡。 单击版本历史时间线下方的“高级”选项卡,找到“高级”属性集,然后搜索 log4j.properties 条目。否则,您可以在屏幕右上角的搜索栏中搜索“log4j”,Ambari 将突出显示相关设置。

请参阅here 获取详细说明 HDFS 服务的 log4j.properties 文件示例的图像。

请记住,每个服务的日志文件只会捕获您的应用程序与该服务之间的交互。如果您使用 Java,我个人建议您将 log4j 实例添加到您的应用程序中;如果您不知道如何执行此操作,我的建议是关注this tutorial(在this SO question 上找到)以正确设置。根据您的应用程序调用每个服务的 API 的方式,您可以询问命令的输出并将其记录到您自己的日志文件中。


就在一个集中位置查看日志文件而言,您有两种选择:

    升级到 HDP 2.5 以利用 Ambari 日志搜索。 继续使用 HDP 2.4 并使用 Flume 从头开始​​创建解决方案。

我将概述下面的两个选项。

1。升级到 HDP 2.5 以利用 Ambari 日志搜索。

我敢说“更简单”的方法(我的意思是需要您付出最少的努力)是将您的集群升级到 HDP 2.5。更新后的 Hortonworks 数据平台通过其最新版本 Ambari 2.4 对 Ambari 进行了重大改造。此版本包含 Ambari Infra,借助 Ambari Log Search,您可以查看所有日志文件、按日志级别过滤并执行图形和复杂功能。

如果升级整个集群不可行,另一种选择是从 Hortonworks 的网站获取 Ambari 2.4 存储库并手动安装。 Hortonworks 的一位代表告诉我,Ambari 2.4 可以在 HDP 2.4 上运行而不会出现问题,因此这可能是一个可行的替代方案……不过我建议您在尝试之前先与 Hortonworks 核实一下!

Ambari 日志搜索的唯一缺点是您无法在搜索中包含应用程序日志 - Ambari 日志搜索仅适用于 Hadoop 服务。

2。继续使用 HDP 2.4 并使用 Flume 从头开始​​创建解决方案。

如果您不想升级到 Ambari 2.4,那么其他选项看起来有点稀缺。我个人不知道任何开源解决方案,一些粗略的谷歌搜索返回的结果很少。 Apache Chukwa 和 Cloudera's Scribe 都应该解决 Hadoop 中的分布式日志收集问题,但都是 9 岁。同样的过程还有an older Hortonworks process for log collection that leverages Flume,可能值得一看。 This SO thread 也推荐 Flume 用于其他情况。使用 Flume 从每个服务器 /var/log/ 目录收集日志可能值得考虑。

此解决方案的优点是您的应用程序日志文件可以作为 Source 包含在 Flume 工作流程中,并包含在其他 HDP 服务日志中(取决于您决定将它们放在哪里)。

【讨论】:

感谢@Fredulom,我知道我们可以使用相应服务的 log4j.properties 为守护进程配置日志记录,但是如何为我的应用程序设置日志记录配置?例如,假设我有一个使用 HBase 和 Mapreduce 的主类,并且我的记录器名称是 com.example。我是否在 hbase-log4j 或 hdfs-log4j 或 yarn-log4j 中设置 log4j.logger.com.example?我应该在配置组中包含哪些节点? 另外,您推荐了 Ambari Infra(我假设特别是 Ambari Log Search)来查看日志文件。是否有任何您推荐的用于查看和搜索日志文件的其他开源解决方案 我想,您在应用程序中使用的任何服务都需要修改。对于您在评论中指定的示例,您可能希望同时为 hbase 和 hdfs 设置 log4j.properties。也就是说,记录器只会记录您的应用程序与该特定服务的交互方式,而不会记录其他任何内容 - 如果您想要对整个应用程序进行整体日志记录,您需要为该应用程序配置自己的 log4j 实例,而这很可能不会不包含在 Ambari Infra 的 Ambari 日志搜索功能中。 回答您的第二条评论,是的 Ambari Infra w。我说的是 Ambari 日志搜索。就对此的开源解决方案而言,它们似乎很少见。我不知道有什么想法,粗略地用谷歌搜索答案几乎没有结果。 Apache Chukwa 和 Cloudera's Scribe 都应该解决 Hadoop 中的分布式日志收集问题,但都是 9 岁... [见下一条评论] ...如果您现在无法获得 HDP 2.5 和/或 Ambari 2.4,还有一个 older Hortonworks process for log collection that leverages Flume for the same process 可能值得一看。 This SO 线程还建议在其他情况下使用 Flume,因此可能值得使用 Flume(如果有的话)从您的服务器收集日志:)【参考方案2】:

如果您使用 HDP,您应该查看这篇文章(展示如何配置 log4j):

How to control size of log files for various HDP components?

这个也很有用(展示了如何使用 log4j 压缩 HDFS 日志):

How to rotate as well as zip the NameNode logs using log4j extras feature?

【讨论】:

以上是关于如何在 Hadoop / HDP 组件中配置日志记录?的主要内容,如果未能解决你的问题,请参考以下文章

hadoop如何停止平衡过程

纱线应用的持续时间登录hadoop

Amabari搭建Hadoop集群

HDP2.4安装:集群及组件安装

Hadoop深度运维:Apache集群原地升级Ambari-HDP

如何从开源 Hadoop 构建 deb/rpm 存储库或由 ambari 安装的公开可用的 HDP 源代码