一、日志分类
1、进程日志
进程日志即为hadoop各个守护进程的日志,例如ResourceManager、NodeManager、NameNode、DataNode等守护进程。集群启动或者运行期间出现异常,首先应该查看进程日志,它是系统排障的重要工具。默认位置为${HADOOP_HOME}/logs。可以在mapred-env.sh和yarn-env.sh中分别指定HADOOP_MAPRED_LOG_DIR和YARN_LOG_DIR变量来改变默认位置。
进程日志是滚动记录的,当日志达到指定大小之后,会滚动写入下一个文件。可以在$HADOOP_HOME/etc/hadoop/log4j.properties中对文件大小、保留个数等进行相应设置。
2、作业日志
作业日志记录了作业运行的整体情况,以及该作业的计数器统计信息。比如作业一共有多少个map,多少个reduce,分别在什么时候哪个节点启动,各个map进行了多少文件读写、占用了多少CPU时间等等。作业日志在系统监控和调优方面有重要作用。
3、Container日志
Container日志是hadoop各个container记录的日志,其中会包含错误或失败的重要信息。如果没有打开日志聚合,默认是分布在各个nodemanager节点上的。如果打开了日志聚合选项,则会统一放在集中的位置(比如HDFS上)。Container日志会记录作业运行时会发生的各种运行时信息和错误,对于调试和调优有很大的帮助。
二、作业日志位置的移动
作业日志记录的是作业的整体情况,而且会随着作业执行的阶段变化而改变。
1、作业启动后,hadoop会将作业日志放在${yarn.app.mapreduce.am.staging-dir}/${user}/.staging/{$job_ID}目录。其中:
yarn.app.mapreduce.am.staging-dir在yarn-site.xml中指定,默认是/tmp/hadoop-yarn/staging
${user}是运行作业的用户
例如:grid用户发起一个mr作业,job_id为job_1483969906296_0002,在其运行没有结束时,作业的日志会放在/tmp/hadoop-yarn/staging/grid/.staging/job_1483969906296_0002目录中。
2、作业完成后,作业日志会被移到${mapreduce.jobhistory.intermediate-done-dir}/${user},其中${mapreduce.jobhistory.intermediate-done-dir}可以在mapred-site.xml中配置,默认值是${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate
3、第2步的这个新地址只是个临时的中转站,hadoop会定时将这个目录中的日志转移到永久地址:${mapreduce.jobhistory.done-dir}/${year}/${month}/${day}/000000目录中。其中的000000应该会发生变化,暂时未确定代表何种变量,以后确认后再补充。
三、其它补充
1、作业日志中的jhist文件为json格式,保存了作业的主要信息
2、如果需要查看container日志,最好打开日志聚合(在yarn-site.xml中配置yarn.log-aggregation-enable为true),可以使用yarn logs -applicationId <application_id>查看完整的container日志。
原创文章,作者:carmelaweatherly,如若转载,请注明出处:https://blog.ytso.com/tech/opensource/194154.html