Hadoop日志详解
文章目录
- 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日志详解相关推荐
- MySQL管理之日志详解
MySQL日志详解 错误日志 MySQL的错误信息是在data目录下的 错误日志本身所定义的内容本身是可以定义的 编辑配置文件,定义错误日志: log-error=/path/to/xx.err ...
- JVM GC 日志详解
本文采用的JDK版本: java version "1.8.0_144" Java(TM) SE Runtime Environment (build 1.8.0_144-b01) ...
- 《Hadoop技术详解》一导读
前 言 Hadoop技术详解 本书采用的约定 本书采用以下排版约定. 斜体 用于表明新的术语.URL.电子邮件地址.文件名和文件扩展名. 等宽字体 用于程序清单,正文段落中有关的程序元素,如变量及函数 ...
- Apache Hadoop版本详解
由doop版本混乱多变,因此,Hadoop的版本选择问题一直令很多初级用户苦恼.本文总结了ApacheHadoop和Cloudera Hadoop的版本衍化过程,并给出了选择Hadoop版本的一些建议 ...
- JVM从入门到精通(十一): CMS日志详解,G1日志详解,JVM常见参数总结;补充纤程知识
CMS 日志格式分析 使用CMS:添加参数UserConcMarkSweepGC(CMS+ParNew) CMS常用参数 -XX:+UseConcMarkSweepGC -XX:ParallelCMS ...
- MySQL日志文件之错误日志和慢查询日志详解
今天天气又开始变得很热了,虽然很热很浮躁,但是不能不学习,我在北京向各位问好.今天给大家分享一点关于数据库日志方面的东西,因为日志不仅讨厌而且还很重要,在开发中时常免不了与它的亲密接触,就在前几天公司 ...
- Hadoop Streaming详解
一: Hadoop Streaming详解 1.Streaming的作用 Hadoop Streaming框架,最大的好处是,让任何语言编写的map, reduce程序能够在hadoop集群上运行:m ...
- SpringBoot2.1.5(16)--- Spring Boot的日志详解
SpringBoot2.1.5(16)--- Spring Boot的日志详解 市面上有许多的日志框架,比如 JUL( java.util.logging), JCL( Apache Commons ...
- GC日志详解[乐乐独记]
GC日志详解[乐乐独记] 1.静态分析GC日志 1.1.Parallel GC日志 1.2.CMS GC日志 1.3.G1 GC日志 2.使用工具分析GC日志 10.辅助知识 10.1.元空间不足也会 ...
最新文章
- 深度剖析云计算背后采用的具体技术
- 蓝桥杯-用宏求球的体积(java)
- 2019 Multi-University Training Contest 1 - 1001 - Blank - dp
- fastq-dump 报错 解决方案
- 一步步编写操作系统 62 函数调用约定
- pandas 聚合函数
- PKIX path building failed
- 用Python 开发您的第一个 XGBoost 模型(收藏)
- Android 反编译修改包名、重新签名、更换app名称
- Auto Layout 使用心得—— 实现三等分
- 搜索词纠错(拼写检查)、相关搜索的原理与实现
- 读《大学生上课为什么一定要认真听讲》有感
- 基于多传感器数据融合的全自动泊车系统研究与应用(开题报告)
- Centos7.4安装Nginx实战
- 高并发访问数据库问题
- 红皮书 Object
- 干货收集和整理:Pytorch,Keras,数据分析
- git 命令使用(持续更新)
- 在竞争激烈的情况下,ReentrantLock与CAS的性能比较
- 火狐浏览器下载最后一秒卡住怎么办?