文章目录

  • 1 Hadoop日志详解
  • 2 Hadoop 系统服务输出的日志
    • 2.1 修改Hadoop系统服务日志目录(包括NameNode、secondarynamenode、datanode、resourcemanager、nodemanager)
  • 3 Mapreduce程序输出来的日志
    • 3.1 作业统计日志
      • 3.1.1 作业统计日志概念
      • 3.1.2 作业统计日志配置
      • 3.1.3 作业统计日志产生过程
        • 3.1.3.1 启动作业的 ApplicationMaster 并写日志至 HDFS
        • 3.1.3.2 HDFS 内转移历史运行日志
        • 3.1.3.3 周期转移 done_intermediate 中的日志文件到 done 目录
    • 3.2 任务运行日志 (Container 日志)
      • 3.2.1 Container 日志概念
      • 3.2.2 不开启日志聚合时的日志配置
      • 3.2.3 开启日志聚合时的日志配置
  • 4 历史服务器 (JobHistory Server)
    • 4.1 历史服务器配置
    • 4.2 启动历史服务器

1 Hadoop日志详解

Hadoop的日志大致可以分为两大类:
1、 Hadoop 系统服务输出的日志;
2、 Mapreduce程序输出来的日志。
且这两类的日志存放的路径是不一样的。本文基于Hadoop 3.1.2 版本进行说明。

2 Hadoop 系统服务输出的日志

诸如 NameNode、DataNode、ResourceManage 等系统自带的服务输出来的日志默认是存放在 ${HADOOP_HOME}/logs 目录下。比如 resourcemanager 的输出日志为 yarn-${USER}-resourcemanager-${hostname}.log

  • yarn 指的就是该日志的属性即为 YARN,其他类似的有 mapred、hadoop 等
  • ${USER}s 是指启动 resourcemanager 进程的用户
  • resourcemanager 就是指明 resourcemanager 进程,其他类似的有 namenode、zkfc、historyserver 等
  • ${hostname} 是 resourcemanager 进程所在机器的 hostname
    当日志到达一定的大小(可以在 ${HADOOP_HOME}/etc/hadoop/log4j.properties 文件中配置)将会被切割出一个新的文件,切割出来的日志文件名类似 yarn-${USER}-resourcemanager-${hostname}.log.数字 的形式,后面的数字越大,代表日志越旧。在默认情况下,只保存前 20 个日志文件,比如下面:

2.1 修改Hadoop系统服务日志目录(包括NameNode、secondarynamenode、datanode、resourcemanager、nodemanager)

在hadoop-env.sh文件里加入下面内容:

export HADOOP_LOG_DIR=/data/hadoop/logs

3 Mapreduce程序输出来的日志

3.1 作业统计日志

3.1.1 作业统计日志概念

作业运行由 MRAppMaster(MapReduce 作业的 ApplicationMaster)产生,详细记录了作业启动时间、运行时间,每个任务启动时间、运行时间、Counter 值等信息,与 Hadoop 1.0 中的 JobHistory 日志是基本一致。MapReduce 作业的 ApplicationMaster 也运行在 Container 中,且是编号为 000001 的 Container,比如 container_1385051297072_0001_01_000001,它自身可认为是一个特殊的 task,因此,也有自己的运行日志,该日志与 Map Task 和 Reduce Task 类似,但并不是下文将要介绍的”作业运行日志”。

ApplicationMaster 产生的作业运行日志举例如下,日志采用 json 的格式保存:

   {"type":"JOB_SUBMITTED","event":{"org.apache.hadoop.mapreduce.jobhistory.JobSubmitted":{"jobid":"job_1385051297072_0002″,"jobName":"QuasiMonteCarlo","userName":"yarn", "submitTime":1385393834983,"jobConfPath":"hdfs://hadoop-test/tmp/hadoop-yarn/staging/yarn/.staging/job_1385051297072_0002/job.xml","acls":{},"jobQueueName":"default","workflowId":"","workflowName":"","workflowNodeName":"","workflowAdjacencies":"","workflowTags":""}}}{"type":"JOB_INITED","event":{"org.apache.hadoop.mapreduce.jobhistory.JobInited":{"jobid":"job_1385051297072_0002″,"launchTime":1385393974505,"totalMaps":8,"totalReduces":1,"jobStatus":"INITED","uberized":false}}}{"type":"JOB_INFO_CHANGED","event":{"org.apache.hadoop.mapreduce.jobhistory.JobInfoChange":{"jobid":"job_1385051297072_0002″,"submitTime":1385393834983,"launchTime":1385393974505}}}

3.1.2 作业统计日志配置

历史作业的记录里面包含了一个作业用了多少个 Map、用了多少个 Reduce、作业提交时间、作业启动时间、作业完成时间等信息;这些信息对分析作业是很有帮助的,我们可以通过这些历史作业记录得到每天有多少个作业运行成功、有多少个作业运行失败、每个队列作业运行了多少个作业等很有用的信息。这些历史作业的信息是通过下面的信息配置的:

在 mapred-site.xml 文件中进行配置(路径为hdfs路径):

name value description
yarn.app.mapreduce.am.staging-dir /tmp/hadoop-yarn/staging The staging dir used while submitting jobs.
mapreduce.jobhistory.done-dir ${yarn.app.mapreduce.am.staging-dir}/history/done
mapreduce.jobhistory.intermediate-done-dir ${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate

3.1.3 作业统计日志产生过程

3.1.3.1 启动作业的 ApplicationMaster 并写日志至 HDFS

  • ResourceManager 启动作业的 ApplicationMaster
  • ApplicationMaster 运行过程中,将日志写到 ${yarn.app.mapreduce.am.staging-dir}/yarn/.staging/job_XXXXX_XXX/ 下
  • 参数 yarn.app.mapreduce.am.staging-dir 的默认值是 /tmp/hadoop-yarn/staging
  • 该目录下将存在3个文件,分别是以 “.jhist“、”.summary” 和 “.xml” 结尾的文件,分别表示作业运行日志、作业概要信息和作业配置属性,其中,作业概要信息只有一句话,举例如下:
jobId=job_1385051297072_0002,submitTime=1385393834983,launchTime=1385393974505,firstMapTaskLaunchTime=1385393976706,firstReduceTaskLaunchTime=1385393982581,finishTime=1385393985417,resourcesPerMap=1024,resourcesPerReduce=1024,numMaps=8,numReduces=1,user=yarn,queue=default,status=SUCCEEDED,mapSlotSeconds=47,reduceSlotSeconds=5,jobName=QuasiMonteCarlo

3.1.3.2 HDFS 内转移历史运行日志

  • 所有任务运行完成后,意味着,该作业运行完成
  • 此时 ApplicationMaster 将三个文件拷贝到 mapreduce.jobhistory.intermediate−done−dir/{ mapreduce.jobhistory.intermediate-done-dir}/mapreduce.jobhistory.intermediate−done−dir/{username} 目录下,拷贝后的文件名后面添加 “_tmp”
  • 其中 mapreduce.jobhistory.intermediate-done-dir 默认值是 ${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate
  • ApplicationMaster 将拷贝完成的三个文件重新命名成 “.jhist”、”.summary” 和 “.xml” 结尾的文件(去掉 “_tmp”)

3.1.3.3 周期转移 done_intermediate 中的日志文件到 done 目录

  • 周期性扫描线程定期将 done_intermediate 的日志文件转移到 done 目录
  • 通过参数 mapreduce.jobhistory.done-dir 配置,默认值为 ${yarn.app.mapreduce.am.staging-dir}/history/done)下
  • 同时删除 “.summary” 文件(该文件中的信息,.jhist 文件中都有)
  • ApplicationMaster 移除 ${yarn.app.mapreduce.am.staging-dir}/yarn/.staging/job_XXXXX_XXX/ 目录

3.2 任务运行日志 (Container 日志)

3.2.1 Container 日志概念

默认情况下,任务运行日志 (Container 日志) 产只会存放在各 NodeManager 的本地磁盘上,且 NodeManager 将日志保存到 yarn.nodemanager.log-dirs 下 ,该属性缺省值为 ${yarn.log.dir}/userlogs,也就是 Hadoop 安装目录下的 logs/userlogs 目录中。

因为默认情况下,任务运行日志产只会存放在各 NodeManager 的本地磁盘上,而一个集群又有多个 NodeManager,将作业和任务日志存放在各个节点上肯定不便于统一管理和分析,为此,我们可以启用日志聚集功能。打开该功能后,各个任务运行完成后,会将生成的日志推送到 HDFS 的一个目录下,以便集中管理和分析(之前的并不会立即删除,在 HDFS 上,每个任务产生的三个文件,即 syslog、stderr 和 stdout 将合并一个文件,并通过索引记录各自位置)。

3.2.2 不开启日志聚合时的日志配置

Container 日志包含 ApplicationMaster 日志和普通 Task 日志等信息。默认情况下,这些日志信息是存放在 ${HADOOP_HOME}/logs/userlogs 目录下(在那些 NodeManager 的机子上),我们可以通过下面的配置进行修改:

<property><description>Where to store container logs. An application's localized log directory will be found in ${yarn.nodemanager.log-dirs}/application_${appid}.Individual containers' log directories will be below this, in directories  named container_{$contid}. Each container directory will contain the files stderr, stdin, and syslog generated by that container.</description><name>yarn.nodemanager.log-dirs</name><value>${yarn.log.dir}/userlogs</value>
</property>

3.2.3 开启日志聚合时的日志配置

日志聚集是 YARN 提供的日志中央化管理功能,它能将运行完成的 Container/ 任务日志上传到 HDFS 上,从而减轻 NodeManager 负载,且提供一个中央化存储和分析机制。默认情况下,Container/ 任务日志存在在各个 NodeManager 上,如果启用日志聚集功能需要额外的配置。
在 yarn-site.xml 中设置

name value description
yarn.log-aggregation-enable false 是否启用日志聚集功能。
yarn.log-aggregation.retain-seconds -1 在 HDFS 上聚集的日志最多保存多长时间。
yarn.log-aggregation.retain-check-interval-seconds -1 多长时间检查一次日志,并将满足条件的删除,如果是 0 或者负数,则为上一个值的 1/10。
yarn.nodemanager.remote-app-log-dir /tmp/logs 当应用程序运行结束后,日志被转移到的HDFS目录(启用日志聚集功能时有效)
yarn.nodemanager.remote-app-log-dir-suffix 日志将被转移到目录 ${yarn.nodemanager.remote-app-log-dir}/${user}/${thisParam} 下 远程日志目录子目录名称(启用日志聚集功能时有效)

注意:如果启用了日志聚集功能,那么在${HADOOP_LOG_DIR}/userlogs下生成的yarn的任务运行日志目录在被上传到hdfs上之后就会从linux上删除掉了,大概在执行完mapreduce程序的几秒后。

4 历史服务器 (JobHistory Server)

MapReduce 的 JobHistory Server,这是一个独立的服务,可通过 web UI 展示历史作业日志,之所以将其独立出来,是为了减轻 ResourceManager 负担。JobHistory Server 将会分析作业运行日志,并展示作业的启动时间、结束时间、各个任务的运行时间,各种Counter数据等,并产生一个指向作业和任务日志的链接,其默认端口号为 19888。通常可以启动在一台独立的机器上。

4.1 历史服务器配置

你需在 mapred-site.xml 中对其进行配置


<property>
<name>mapreduce.jobhistory.address</name>
<value>0.0.0.0:10020</value>
</property><property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>0.0.0.0:19888</value>

上面的参数是在 mapred-site.xml 文件中进行配置,mapreduce.jobhistory.address 和 mapreduce.jobhistory.webapp.address 默认的值分别是 0.0.0.0:10020 和 0.0.0.0:19888,大家可以一定要根据自己的情况进行相应的配置,最好别用默认的 0.0.0.0 ,参数的格式是 host:port。

在 Hadoop 历史服务器的 WEB UI 上最多显示 20000 个历史的作业记录信息;其实我们可以在 mapred-site.xml 文件中通过下面的参数进行配置,然后重启一下 Hadoop jobhistory 即可。

<property><name>mapreduce.jobhistory.joblist.cache.size</name><value>20000</value>
</property>

此外,与jobhistoryserver相关的配置如下:

name value description
yarn.app.mapreduce.am.staging-dir /tmp/hadoop-yarn/staging The staging dir used while submitting jobs.
mapreduce.jobhistory.done-dir ${yarn.app.mapreduce.am.staging-dir}/history/done
mapreduce.jobhistory.intermediate-done-dir ${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate
mapreduce.jobhistory.cleaner.enable true whether enable hisotry cleaner
mapreduce.jobhistory.cleaner.interval-ms 86400000 How often the job history cleaner checks for files to delete, in milliseconds. Defaults to 86400000 (one day). Files are only deleted if they are older than mapreduce.jobhistory.max-age-ms.
mapreduce.jobhistory.max-age-ms 604800000 Job history files older than this many milliseconds will be deleted when the history cleaner runs. Defaults to 604800000 (1 week).
mapreduce.jobhistory.move.interval-ms 180000 Scan for history files to more from intermediate done dir to done dir at this frequency.

可以看到以上配置大多都可以采用默认值,需要改一下的主要就是:mapreduce.jobhistory.address和mapreduce.jobhistory.webapp.address了。其他的列出来只是作为参考,可能会用到。

4.2 启动历史服务器

配置完上述的参数之后,重新启动 Hadoop jobhistory,这样我们就可以在 mapreduce.jobhistory.webapp.address 参数配置的主机上对 Hadoop 历史作业情况经行查看。

只能在 mapred-site.xml 文件中 mapreduce.jobhistory.webapp.address 配置参数所指定的那台机器上执行:

sbin/mr-jobhistory-daemon.sh start jobhistoryserver

这样我们就可以在相应机器的 19888 端口上打开历史服务器的 WEB UI 界面。可以查看已经运行完的作业情况。且在 HDFS 上可以看到如下目录:

drwxrwx---   - root supergroup          0 2019-03-10 22:44 /tmp/hadoop-yarn/staging
drwxrwx---   - root supergroup          0 2019-03-02 02:09 /tmp/hadoop-yarn/staging/history
drwxrwx---   - root supergroup          0 2019-03-02 02:09 /tmp/hadoop-yarn/staging/history/done
drwxrwxrwt   - root supergroup          0 2019-03-02 02:09 /tmp/hadoop-yarn/staging/history/done_intermediate

参考:
https://blog.csdn.net/u010839779/article/details/79895698
https://blog.csdn.net/u011095110/article/details/83861330
https://blog.csdn.net/qq_35440040/article/details/84233655

Hadoop日志详解相关推荐

  1. MySQL管理之日志详解

    MySQL日志详解 错误日志 MySQL的错误信息是在data目录下的 错误日志本身所定义的内容本身是可以定义的 编辑配置文件,定义错误日志: log-error=/path/to/xx.err   ...

  2. JVM GC 日志详解

    本文采用的JDK版本: java version "1.8.0_144" Java(TM) SE Runtime Environment (build 1.8.0_144-b01) ...

  3. 《Hadoop技术详解》一导读

    前 言 Hadoop技术详解 本书采用的约定 本书采用以下排版约定. 斜体 用于表明新的术语.URL.电子邮件地址.文件名和文件扩展名. 等宽字体 用于程序清单,正文段落中有关的程序元素,如变量及函数 ...

  4. Apache Hadoop版本详解

    由doop版本混乱多变,因此,Hadoop的版本选择问题一直令很多初级用户苦恼.本文总结了ApacheHadoop和Cloudera Hadoop的版本衍化过程,并给出了选择Hadoop版本的一些建议 ...

  5. JVM从入门到精通(十一): CMS日志详解,G1日志详解,JVM常见参数总结;补充纤程知识

    CMS 日志格式分析 使用CMS:添加参数UserConcMarkSweepGC(CMS+ParNew) CMS常用参数 -XX:+UseConcMarkSweepGC -XX:ParallelCMS ...

  6. MySQL日志文件之错误日志和慢查询日志详解

    今天天气又开始变得很热了,虽然很热很浮躁,但是不能不学习,我在北京向各位问好.今天给大家分享一点关于数据库日志方面的东西,因为日志不仅讨厌而且还很重要,在开发中时常免不了与它的亲密接触,就在前几天公司 ...

  7. Hadoop Streaming详解

    一: Hadoop Streaming详解 1.Streaming的作用 Hadoop Streaming框架,最大的好处是,让任何语言编写的map, reduce程序能够在hadoop集群上运行:m ...

  8. SpringBoot2.1.5(16)--- Spring Boot的日志详解

    SpringBoot2.1.5(16)--- Spring Boot的日志详解 市面上有许多的日志框架,比如 JUL( java.util.logging), JCL( Apache Commons ...

  9. GC日志详解[乐乐独记]

    GC日志详解[乐乐独记] 1.静态分析GC日志 1.1.Parallel GC日志 1.2.CMS GC日志 1.3.G1 GC日志 2.使用工具分析GC日志 10.辅助知识 10.1.元空间不足也会 ...

最新文章

  1. 深度剖析云计算背后采用的具体技术
  2. 蓝桥杯-用宏求球的体积(java)
  3. 2019 Multi-University Training Contest 1 - 1001 - Blank - dp
  4. fastq-dump 报错 解决方案
  5. 一步步编写操作系统 62 函数调用约定
  6. pandas 聚合函数
  7. PKIX path building failed
  8. 用Python 开发您的第一个 XGBoost 模型(收藏)
  9. Android 反编译修改包名、重新签名、更换app名称
  10. Auto Layout 使用心得—— 实现三等分
  11. 搜索词纠错(拼写检查)、相关搜索的原理与实现
  12. 读《大学生上课为什么一定要认真听讲》有感
  13. 基于多传感器数据融合的全自动泊车系统研究与应用(开题报告)
  14. Centos7.4安装Nginx实战
  15. 高并发访问数据库问题
  16. 红皮书 Object
  17. 干货收集和整理:Pytorch,Keras,数据分析
  18. git 命令使用(持续更新)
  19. 在竞争激烈的情况下,ReentrantLock与CAS的性能比较
  20. 火狐浏览器下载最后一秒卡住怎么办?

热门文章

  1. 第四届蓝桥杯真题解析【JavaC组】
  2. LC200. 岛屿数量
  3. dns解析失败无法浏览器上网解决办法
  4. BUAA排座位(简)a
  5. WPF TextBox 允许输入数字及字母的工具类
  6. 关于架构的通俗的很受用的几句话
  7. 平面设计中怎么塑造立体感_设计塑造理解和信念的力量
  8. 计算机科班与非科班概述
  9. Dailymotion推出Dailymotion Cloud 主打新型视频收费模式
  10. field.setAccessible(true)