Hadoop日志

Hadoop的日志有很多种,很多初学者往往遇到错而不知道怎么办,其实这时候就应该去看看日志里面的输出,这样往往可以定位到错误。Hadoop的日志大致可以分为两类:(1)、Hadoop系统服务输出的日志;(2)、Mapreduce程序输出来的日志。这两类的日志存放的路径是不一样的。本文基于Hadoop 2.x版本进行说明的,其中有些地方在Hadoop 1.x中是没有的,请周知。
  

一、Hadoop系统服务输出的日志

  诸如NameNode、DataNode、ResourceManage等系统自带的服务输出来的日志默认是存放在${HADOOP_HOME}/logs目录下。比如resourcemanager的输出日志为yarn-${USER}-resourcemanager-${hostname}.log,其中${USER}s是指启动resourcemanager进程的用户,${hostname}是resourcemanager进程所在机器的hostname;当日志到达一定的大小(可以在${HADOOP_HOME}/etc/hadoop/log4j.properties文件中配置)将会被切割出一个新的文件,切割出来的日志文件名类似yarn-${USER}-resourcemanager-${hostname}.log.数字的,后面的数字越大,代表日志越旧。在默认情况下,只保存前20个日志文件,比如下面:

-rw-r--r-- 1 wyp wyp 124M Mar 14 17:01 yarn-wyp-resourcemanager-master.log
-rw-r--r-- 1 wyp wyp 257M Mar  9 10:02 yarn-wyp-resourcemanager-master.log.1
-rw-r--r-- 1 wyp wyp 257M Feb  4 09:05 yarn-wyp-resourcemanager-master.log.10
-rw-r--r-- 1 wyp wyp 257M Feb  1 17:04 yarn-wyp-resourcemanager-master.log.11
-rw-r--r-- 1 wyp wyp 257M Jan 30 01:04 yarn-wyp-resourcemanager-master.log.12
-rw-r--r-- 1 wyp wyp 257M Jan 26 04:01 yarn-wyp-resourcemanager-master.log.13
-rw-r--r-- 1 wyp wyp 257M Jan 22 16:12 yarn-wyp-resourcemanager-master.log.14
-rw-r--r-- 1 wyp wyp 257M Jan 20 17:14 yarn-wyp-resourcemanager-master.log.15
-rw-r--r-- 1 wyp wyp 257M Jan 18 19:01 yarn-wyp-resourcemanager-master.log.16
-rw-r--r-- 1 wyp wyp 257M Jan 15 15:21 yarn-wyp-resourcemanager-master.log.17
-rw-r--r-- 1 wyp wyp 257M Jan 15 15:00 yarn-wyp-resourcemanager-master.log.18
-rw-r--r-- 1 wyp wyp 257M Jan 15 14:40 yarn-wyp-resourcemanager-master.log.19
-rw-r--r-- 1 wyp wyp 257M Mar  5 21:00 yarn-wyp-resourcemanager-master.log.2
-rw-r--r-- 1 wyp wyp 257M Jan 15 14:20 yarn-wyp-resourcemanager-master.log.20
-rw-r--r-- 1 wyp wyp 257M Feb 23 00:00 yarn-wyp-resourcemanager-master.log.3
-rw-r--r-- 1 wyp wyp 257M Feb 20 08:05 yarn-wyp-resourcemanager-master.log.4
-rw-r--r-- 1 wyp wyp 257M Feb 17 17:04 yarn-wyp-resourcemanager-master.log.5
-rw-r--r-- 1 wyp wyp 257M Feb 15 01:05 yarn-wyp-resourcemanager-master.log.6
-rw-r--r-- 1 wyp wyp 257M Feb 12 09:00 yarn-wyp-resourcemanager-master.log.7
-rw-r--r-- 1 wyp wyp 257M Feb  9 17:08 yarn-wyp-resourcemanager-master.log.8
-rw-r--r-- 1 wyp wyp 257M Feb  7 01:10 yarn-wyp-resourcemanager-master.log.9

上面这些都是可以配置的,比如resourcemanager(在${HADOOP_HOME}/etc/hadoop/log4j.properties):

log4j.logger.org.apache.hadoop.yarn.server.resourcemanager.RMAppManager$ApplicationSummary=${yarn.server.resourcemanager.appsummary.logger}
log4j.additivity.org.apache.hadoop.yarn.server.resourcemanager.RMAppManager$ApplicationSummary=false
log4j.appender.RMSUMMARY=org.apache.log4j.RollingFileAppender
log4j.appender.RMSUMMARY.File=${hadoop.log.dir}/${yarn.server.resourcemanager.appsummary.log.file}
log4j.appender.RMSUMMARY.MaxFileSize=256MB(多大切割日志)
log4j.appender.RMSUMMARY.MaxBackupIndex=20(说明保存最近20个日志文件)
log4j.appender.RMSUMMARY.layout=org.apache.log4j.PatternLayout
log4j.appender.RMSUMMARY.layout.ConversionPattern=%d{ISO8601} %p %c{2}: %m%n

resourcemanager日志存放路径也是可以配置的(在${HADOOP_HOME}/etc/hadoop/yarn-env.sh):

# default log directory & file
if [ "$YARN_LOG_DIR" = "" ]; then
  YARN_LOG_DIR="$HADOOP_YARN_HOME/logs"
fi
只需要修改YARN_LOG_DIR的值,这时候,yarn相关的日志记录都将存放在你配置的目录下。


二、Mapreduce程序相关的日志

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

<property>
    <name>mapreduce.jobhistory.done-dir</name>
    <value>${yarn.app.mapreduce.am.staging-dir}/history/done</value>
</property>  
<property>
    <name>mapreduce.jobhistory.intermediate-done-dir</name>
    <value>${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate</value>
</property>
<property>
    <name>yarn.app.mapreduce.am.staging-dir</name>
    <value>/tmp/hadoop-yarn/staging</value>
</property>

(2)、Container日志包含ApplicationMaster日志和普通Task日志等信息。默认情况下,这些日志信息是存放在${HADOOP_HOME}/logs/userlogs目录下,我们可以通过下面的配置进行修改:
<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>





<think>我们正在解决Hadoop日志监控中关于YARN_PID_DIR被替换为HADOOP_PID_DIR的警告问题。根据引用[1]和[3],Hadoop3.x版本中,一些环境变量被重新命名,例如YARN_PID_DIR被HADOOP_PID_DIR取代,HADOOP_PREFIX被HADOOP_HOME取代。因此,我们需要更新配置文件以消除警告。解决方案:1.修改配置文件:在$HADOOP_HOME/etc/hadoop目录下,修改yarn-env.sh和hadoop-env.sh文件,将YARN_PID_DIR替换为HADOOP_PID_DIR,并设置统一的值。2.创建并设置PID目录:确保HADOOP_PID_DIR指向的目录存在,并且有正确的权限。3.重启服务:修改配置后需要重启YARN服务以使更改生效。详细步骤:###1.修改配置文件首先,我们需要修改`yarn-env.sh`和`hadoop-env.sh`文件,将`YARN_PID_DIR`替换为`HADOOP_PID_DIR`。-编辑`yarn-env.sh`:```bashvim$HADOOP_HOME/etc/hadoop/yarn-env.sh```在文件中,找到所有设置`YARN_PID_DIR`的地方(可能被注释掉),将其替换为:```bashexportHADOOP_PID_DIR=/var/run/hadoop```如果没有找到,可以直接添加上述行。-编辑`hadoop-env.sh`:```bashvim$HADOOP_HOME/etc/hadoop/hadoop-env.sh```同样,设置`HADOOP_PID_DIR`:```bashexportHADOOP_PID_DIR=/var/run/hadoop```注意:这里我们使用`/var/run/hadoop`作为示例目录,你可以根据实际情况选择目录。###2.创建目录并设置权限创建目录并赋予Hadoop运行用户(例如hadoop)权限:```bashsudomkdir-p/var/run/hadoopsudochown-Rhadoop:hadoop/var/run/hadoop```###3.重启YARN服务修改配置后,需要重启YARN服务:```bash#停止YARN服务$HADOOP_HOME/sbin/stop-yarn.sh#启动YARN服务$HADOOP_HOME/sbin/start-yarn.sh```###4.验证重启后,检查启动日志,看是否还有警告:```bashtail-f$HADOOP_HOME/logs/yarn-*.log```如果配置正确,警告信息应该消失。###补充说明根据引用[4],PID文件存储的位置对于服务的正常运行非常重要。如果PID文件被删除,可能导致服务无法停止。因此,设置一个合适的目录(如`/var/run/hadoop`)并确保其不被意外删除。###日志监控相关关于日志监控,我们可以通过修改日志级别(如引用[1]所示)来获取更详细的日志信息。例如,在`yarn-env.sh`中设置:```bashexportYARN_ROOT_LOGGER="DEBUG,console"```但注意,这样会产生大量日志,生产环境建议使用`INFO`级别。###相关问题1.如何配置Hadoop日志级别以获取更详细的调试信息?2.Hadoop3.x中有哪些其他弃用环境变量需要迁移?3.YARN服务启动失败时如何进行故障排查?4.如何为Hadoop不同组件设置独立的PID存储目录?[^1]:配置文件路径:$HADOOP_HOME/etc/hadoop,环境变量设置文件为yarn-env.sh和hadoop-env.sh[^3]:Hadoop警告:HADOOP_PREFIX被HADOOP_HOME替换[^4]:PID文件存储位置的重要性</think>### Hadoop 日志监控与 YARN_PID_DIR 警告解决方案 #### 问题根源分析 在 Hadoop 3.x 中,环境变量命名规范进行了统一优化: 1. `YARN_PID_DIR` → `HADOOP_PID_DIR` [^3] 2. `YARN_LOG_DIR` → `HADOOP_LOG_DIR` [^2] 3. `YARN_CONF_DIR` → `HADOOP_CONF_DIR` [^2] 这些变更旨在统一 Hadoop 生态组件的配置管理,但旧配置仍被兼容性支持(产生警告)。 --- ### 完整解决步骤 #### 1. **更新环境变量配置** 修改 `$HADOOP_HOME/etc/hadoop` 下的配置文件: ```bash # 编辑 hadoop-env.sh vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh # 添加/修改以下配置 export HADOOP_PID_DIR=/var/run/hadoop # 统一PID目录 export HADOOP_LOG_DIR=/var/log/hadoop # 统一日志目录 export HADOOP_ROOT_LOGGER=INFO,DRFA # 设置日志级别[^1] ``` ```bash # 编辑 yarn-env.sh vim $HADOOP_HOME/etc/hadoop/yarn-env.sh # 注释或删除所有 YARN_PID_DIR/YARN_LOG_DIR 定义 # export YARN_PID_DIR=... # 删除此行 ``` #### 2. **创建目录并授权** ```bash sudo mkdir -p /var/run/hadoop /var/log/hadoop sudo chown -R yarn_user:yarn_group /var/run/hadoop /var/log/hadoop sudo chmod 755 /var/run/hadoop ``` #### 3. **验证配置生效** ```bash # 检查环境变量 grep -r "HADOOP_PID_DIR" $HADOOP_HOME/etc/hadoop/ # 预期输出 hadoop-env.sh:export HADOOP_PID_DIR=/var/run/hadoop ``` #### 4. **重启服务并监控日志** ```bash # 重启YARN $HADOOP_HOME/sbin/stop-yarn.sh $HADOOP_HOME/sbin/start-yarn.sh # 监控日志验证警告消失 tail -f /var/log/hadoop/yarn-*-resourcemanager-*.log | grep "WARNING" ``` #### 5. **日志监控优化建议** 在 `yarn-env.sh` 中增强日志监控: ```bash # 启用DEBUG级别日志(故障排查时使用) export YARN_ROOT_LOGGER="DEBUG,DRFA" # DRFA=Daily Rolling File Appender[^1] # 生产环境推荐配置 export YARN_ROOT_LOGGER="INFO,DRFA" export YARN_LOGFILE=yarn-%u.log # 按用户区分日志 export YARN_LOG_LEVEL=INFO # 全局日志级别 ``` --- ### 关键原理说明 1. **PID目录作用** 存储YARN守护进程的PID文件(如 `yarn-resourcemanager.pid`),用于服务管理: ```bash # 示例PID文件路径 /var/run/hadoop/yarn-<user>-resourcemanager.pid ``` 错误配置会导致服务无法正常停止[^4]。 2. **日志目录统一** `HADOOP_LOG_DIR` 替代了组件专属目录(如 `YARN_LOG_DIR`),使日志收集更规范: ``` /var/log/hadoop/ ├── yarn-resourcemanager.log ├── hdfs-namenode.log └── mapreduce-history.log ``` 3. **兼容性机制** 当检测到旧变量(如 `YARN_PID_DIR`)时,Hadoop 会将其值赋给新变量并输出警告[^2][^3]。 --- ### 验证结果 成功配置后: 1. 服务启动警告消失 2. 所有PID文件统一存储在 `/var/run/hadoop` 3. 日志集中输出到 `/var/log/hadoop` 便于监控 4. 可通过 `jps` 命令验证进程ID与PID文件一致性 > **注意**:若需保留历史日志格式,可在 `log4j.properties` 中配置自定义Appender。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值