热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Hadoop2.6日志文件解析与MapReduce日志管理深入探讨

Hadoop2.6主要由HDFS和YARN两大部分组成,其中YARN包含了运行在ResourceManager的JVM中的组件以及在NodeManager中运行的部分。本文深入探讨了Hadoop2.6日志文件的解析方法,并详细介绍了MapReduce日志管理的最佳实践,旨在帮助用户更好地理解和优化日志处理流程,提高系统运维效率。

Hadoop 2.6包含两个大部分:DFS和Yarn,而Yarn里面又包含在Resource Manager的JVM中运行的部分和在Node Manager里面运行的JVM部分。所以整个系统(不考虑加装ZooKeeper的HA的情况)的log是分别放在3个log里面的。

1. 对于DFS的log,在Name Node和Data Node里面,默认可以在${HADOOP_INSTALL}/logs里面看到。这个是非DFS的文件,直接可以通过Linux文件系统看到。

2. 对于Yarn的log,在Resource Manager和Node Manager里面,默认可以在${HADOOP_INSTALL}/logs里面看到。这个也是非DFS的文件,直接可以通过Linux文件系统看到。

对于MapReduce任务的log,情况就比较的复杂了。在2.6里面,task是按照application->container的层次来管理的,所以在Name Node机器上运行mapreduce程序的时候,在console里面看到的log都可以通过在相应的data node/node manager里面的${HADOOP_INSTALL}/logs/userlogs下面找到。这个部分也是非DFS文件,直接可以通过Linux文件系统看到。

这些log也可以通过Hadoop Web管理页面看到,比较方便。


网络上搜来的信息基本都是关于上面这些部分的。可对于一个开发人员而言,上面这些log对于调试程序的帮助就不大了。Java程序员会经常要用System.out/err来输出中间内容到standard output,而且工业界早就用logger来记录系统状态和帮助调试了。那么我们在mapreduce程序体里面怎么来得到这些log哪。


首先讲讲System.out的输出,这个网络上的介绍还算详细。基本来说在main方法里面的部分都可以在console上输出。这一点不管是在Eclipse里面通过插件链接DFS运行on MapReduce的时候,还是直接在namenode上跑jar包,都可以看的到。直接编程读写DFS的程序也能够通过这个方法来看到中间结果和调试程序。而上面也说了,因为这个task的部分是运行在resource manager的启动的JVM里面(这个部分不是很确定,也许是单独启动的一个JVM),所以System.out的输出可以看到。而一旦程序进入Mapper和Reducer的部分,这个时候,任务是分发到datanode的机器里面跑,那里的JVM的输出就不会再返回到task的JVM了,所以在Mapper和Reducer里面的System.out输出是无法看到的。


那么这个时候怎么来写log哪?网络搜索的结果基本给了3个方法:1. 用log4j来生成logger;2. 用apache common里面的LogFactory生成logger;3. 用MultipleOutput来自己写log输出。

1和2本质是一样的,只是调用现成的Logger类。3是要自己管理log文件的生成和输出,灵活但是很累。


现在最关键的问题来了。我用Log4j或者LogFactory的Logger输出的log文件在哪里?搜了一天,基本讲的都语焉不详,特别是针对Hadoop 2.6的,没有找到。综合了几个帖子,终于发现了问题所在。为了能看到Logger输出的内容,需要做如下几件事:

1. 在启动Hadoop集群的时候,除了start-yarn.sh和start-dfs.sh,还要启动historyserver,命令是

[plain] view plaincopy
  1. mr-jobhistory-daemon.sh start historyserver  

 mr-jobhistory-daemon.sh命令是在${HADOOP_INSTALL}/sbin/目录下面。启动完了,用jps命令可以看到有JobHistoryServer的进程启动。

启动了HistoryServer后,就可以看到Tracking URL里面的History了。

还能在Hadoop Web管理界面里看到每个Job的历史Map和Reduce任务,以及每个任务所在的datanode。


点击Maps和Reduces后面的数字link,就能看到每个任务运行的情况。


但是当去点击log的链接的时候,会碰到Aggregation function is not enabled错误。为了能看到每个Map和Reduce任务的Log,还必须在yarn-site.xml里面配置aggregation为true。

[html] view plaincopy
  1. <property>  
  2.   <name>yarn.log-aggregation-enablename>  
  3.   <value>truevalue>  
  4.   <description>Configuration to enable or disable log aggregationdescription>  
  5. property>  

然后将yarn-site.xml同步到所有的节点&#xff0c;在重启集群。这个时候再点击上面那个logs链接&#xff0c;就可以看到每个任务的log了&#xff0c;而Logger们输出的内容也在里面&#xff01;&#xff01;


到了这里&#xff0c;就只剩下一个问题了。这个log文件在哪里&#xff1f;查看yarn-site.xml后终于发现了MapReduce任务的log的位置。

[html] view plaincopy
  1. <name>yarn.nodemanager.remote-app-log-dirname>  
  2. <value>/logsvalue>  
  3. <description>HDFS directory where the application logs are moved on application completion. Need to set appropriate permissions. Only applicable if log-aggregation is enabled. The default value is "/logs" or "/tmp/logs" description>  
  4. t;/property>  

注意红色字的部分&#xff0c;这里清楚的指明了这个log是存放在HDFS文件系统里面的&#xff0c;不是放在Linux文件系统里面的。在hdfs://namenode/logs/hadoop/logs里面&#xff0c;终于发现了每个任务对应的log文件夹。每个任务文件夹里有两个文件。分别对应的Map任务和Reduce任务。
[plain] view plaincopy
  1. [hadoop&#64;SXV2V999 ~]$ hdfs dfs -ls hdfs://namenode/logs/hadoop/logs/application_1430285399789_0001  
  2. 15/04/29 23:02:01 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable  
  3. Found 2 items  
  4. -rw-r-----   2 hadoop supergroup      58369 2015-04-29 13:32 hdfs://namenode/logs/hadoop/logs/application_1430285399789_0001/hostname_39575  
  5. -rw-r-----   2 hadoop supergroup     399834 2015-04-29 13:32 hdfs://namenode/logs/hadoop/logs/application_1430285399789_0001/hostname_54053  

hostname部分是对应的datanode的hostname。

在Web页面里显示的也就是从这两个文件里读取并排版的。自此每个log文件的具体位置终于水落石出。



推荐阅读
  • 基于域名、端口和IP的虚拟主机构建方案
    本文探讨了在单台物理服务器上构建多个Web站点的虚拟主机方案,详细介绍了三种主要的虚拟主机类型:基于域名、基于IP地址和基于端口的虚拟主机。每种类型的实现方式及其优缺点均进行了深入分析,为实际应用提供了全面的技术指导。 ... [详细]
  • 技术日志:Ansible的安装及模块管理详解 ... [详细]
  • 如何在Mac上构建高效的本地服务器环境
    在Mac上构建高效的本地服务器环境,首先需要了解基本步骤:1. 配置目录基础;2. 启动Apache服务;3. 添加自定义文档至本地服务器;4. 查看自定义效果。此外,还可以通过手机或其他电脑访问本机服务器,以确保跨设备的兼容性和调试效果。Mac系统自带的Apache服务为本地开发提供了便捷的工具,本文将详细介绍每个步骤的具体操作方法。 ... [详细]
  • Java中高级工程师面试必备:JVM核心知识点全面解析
    对于软件开发人员而言,随着技术框架的不断演进和成熟,许多高级功能已经被高度封装,使得初级开发者只需掌握基本用法即可迅速完成项目。然而,对于中高级工程师而言,深入了解Java虚拟机(JVM)的核心知识点是必不可少的。这不仅有助于优化性能和解决复杂问题,还能在面试中脱颖而出。本文将全面解析JVM的关键概念和技术细节,帮助读者全面提升技术水平。 ... [详细]
  • JBPM 6.5 环境配置深入解析(下篇)
    本文深入探讨了JBPM 6.5 的环境配置细节,从零开始详细介绍了下载、解压后的文件结构,并结合实际操作步骤,为初学者提供了全面的配置指南。通过具体的示例和详细的解释,帮助读者快速掌握 JBPM 6.5 的安装与配置过程。 ... [详细]
  • 【Linux】CentOS 7 远程连接指南:高效安全的远程管理方法
    在 CentOS 7 中实现高效且安全的远程管理,本文详细介绍了如何检查和安装配置 OpenSSH。首先,通过 `yum list installed` 命令检查系统是否已安装 OpenSSH,若未安装,则使用 `yum install openssh-server` 进行安装。随后,配置 SSH 服务以确保其安全性和稳定性,包括修改默认端口、禁用 root 登录等关键步骤。此外,还提供了常见问题的解决方案,帮助用户顺利进行远程连接。 ... [详细]
  • 程序员如何高效开发软件:实用技巧与方法
    在软件开发领域,如何提高开发效率是每个程序员关注的重点。应用软件开发涉及商业和日常生活等多个方面,其核心在于提升软件的实用性和用户体验。相较于纯粹的技术要求,应用软件更注重功能的实现和用户需求的满足。众多软件开发公司致力于这一领域,不断探索和实践高效的开发方法和技术,以确保软件的高质量交付。不同类型的应用软件,如办公自动化、财务管理、娱乐休闲等,都需根据具体应用场景进行定制化开发,以满足用户的多样化需求。 ... [详细]
  • 如何撰写PHP电商项目的实战经验? ... [详细]
  • Spring Security 认证模块的项目构建与初始化
    本文详细介绍了如何构建和初始化Spring Security认证模块的项目。首先,通过创建一个分布式Maven聚合工程,该工程包含四个模块,分别为core、browser(用于演示)、app等,以构成完整的SeehopeSecurity项目。在项目构建过程中,还涉及日志生成机制,确保能够输出关键信息,便于调试和监控。 ... [详细]
  • Spring框架入门指南:专为新手打造的详细学习笔记
    Spring框架是Java Web开发中广泛应用的轻量级应用框架,以其卓越的功能和出色的性能赢得了广大开发者的青睐。本文为初学者提供了详尽的学习指南,涵盖基础概念、核心组件及实际应用案例,帮助新手快速掌握Spring框架的核心技术与实践技巧。 ... [详细]
  • FastDFS Nginx 扩展模块的源代码解析与技术剖析
    FastDFS Nginx 扩展模块的源代码解析与技术剖析 ... [详细]
  • 利用Flask框架进行高效Web应用开发
    本文探讨了如何利用Flask框架高效开发Web应用,以满足特定业务需求。具体案例中,一家餐厅希望每天推出不同的特色菜,并通过网站向顾客展示当天的特色菜。此外,还增加了一个介绍页面,在bios路径下详细展示了餐厅主人、厨师和服务员的背景和简介。通过Flask框架的灵活配置和简洁代码,实现了这一功能,提升了用户体验和餐厅的管理水平。 ... [详细]
  • 掌握PHP编程必备知识与技巧——全面教程在当今的PHP开发中,了解并运用最新的技术和最佳实践至关重要。本教程将详细介绍PHP编程的核心知识与实用技巧。首先,确保你正在使用PHP 5.3或更高版本,最好是最新版本,以充分利用其性能优化和新特性。此外,我们还将探讨代码结构、安全性和性能优化等方面的内容,帮助你成为一名更高效的PHP开发者。 ... [详细]
  • 使用 MyEclipse 和 TestNG 测试框架在 Java 中高效进行单元测试
    通过MyEclipse集成TestNG测试框架,可以在Java开发中高效地进行单元测试。本文介绍了在JDK 1.8.0_121和MyEclipse 10.0离线环境下配置和使用TestNG的具体步骤,帮助开发者提高测试效率和代码质量。 ... [详细]
  • 如何运用蒙特卡洛方法计算NPV:计算机专业毕业设计遇到难题怎么办?
    许多计算机科学专业的学生在大学期间都会遇到这样的困扰:课堂上教授的内容往往偏向理论,实际应用的知识点讲解得较为浅显和概括,导致在进行毕业设计时,如运用蒙特卡洛方法计算净现值(NPV)等复杂问题时感到无从下手。本文旨在探讨如何通过深入理解和实践蒙特卡洛模拟技术,解决这类计算难题,为学生的毕业设计提供实用指导。 ... [详细]
author-avatar
ig56mkw
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有