运行MapReduce
作业时,经常会遇到各种错误,由于缺乏经验,往往不知所云,一般直接将终端打印的错误贴到搜索引擎上查找,以借鉴前人的经验。然而,对于hadoop
而言,当遇到错误时,第一时间应是查看日志,日志里通产会有详细的错误原因提示,本文将总结Hadoop MapReduce
日志存放位置,帮助初学者定位自己遇到的错误。
Hadoop MapReduce
日志分为两部分,一部分是服务日志,一部分是作业日志
Hadoop 1.x版本
MapReduce的服务日志
包括JobTracker
日志和各个TaskTracker
日志,他们的日志位置如下:
JobTracker
:在JobTracker
安装节点上,默认位置是
${hadoop.log.dir}/logs/*-jobtracker-*.log
,该文件每天生成一个,旧的日志后缀是日期,当天的日志文件后缀是“.log”
,其中${hadoop.log.dir}
默认值是hadoop
安装目录,即${HADOOP_HOME}
。
TaskTracker
:在各个TaskTracker
安装节点上,默认位置是
$HADOOP_HOME/logs/*-tasktracker-*.log
,该文件每天生成一个,旧的日志后面会跟一个日志,当天的日志文件后缀是“.log”
作业日志
包括jobhistory
日志和task
日志两部分,
其中,jobhistory
日志是作业运行日志,包括作业启动时间、结束时间,每个任务的启动时间、结束时间,各种counter
信息等,用户可以从这个日志中解析出作业运行的各种信息,是非常有价值的信息。默认存放位置是JobTracker
所在节点的${hadoop.log.dir}/history
目录下,可通过参数hadoop.job.history.location
配置。
每个task
日志存放在task
运行节点上,存放位置是${hadoop.log.dir}/userlogs/<jobid>/<attempt-id>
目录下,每个task
包含三个日志文件,分别是stdout
、stderr
和syslog
,其中,stdout
是通过标准输出打印出来的日志,比如System.out.println
,注意,程序中通过标准输出打印的日志并不会直接显示在终端上,而是保存在这个文件中,syslog
是通过log4j
打印的日志,通常这个日志中包含的有用信息最多,也是错误调试中最关键的参考日志。
Hadoop 2.x版本
YARN系统的服务日志
包括ResourceManager
日志和各个NodeManager
日志,他们的日志位置如下:
ResourceManager
日志存放位置是Hadoop
安装目录下的logs
目录下的yarn-*-resourcemanager-*.log
NodeManager
日志存放位置是各个NodeManager
节点上hadoop
安装目录下的logs
目录下的yarn-*-nodemanager-*.log
应用程序日志
包括jobhistory
日志和Container
日志
jobhistory
日志是应用程序运行日志,包括应用程序启动时间、结束时间,每个任务的启动时间、结束时间,各种counter
信息等。
Container
日志包含ApplicationMaster
日志和普通Task
日志,它们均存放在Hadoop
安装目录下的userlogs
目录中的application_xxx
目录下,其中ApplicationMaster
日志目录名称为container_xxx_000001
,普通task
日志目录名称则为container_xxx_000002
,container_xxx_000003
,….,同Hadoop 1.x
一样,每个目录下包含三个日志文件:stdout
、stderr
和syslog
,且具体含义是一样的。
转载自
董西成博客:http://dongxicheng.org/mapreduce-nextgen/hadoop-logs-placement/