MapReduce 是在各个机器上运行的, 在运行过程中产生的日志存在于各个机器上,为了能够统一查看各个机器的运行日志,将日志集中存放在 HDFS 上, 这个过程就是日志聚集。如果打开了日志聚合的选项,即yarn.log-aggregation-enable,container的日志会拷贝到hdfs上去,并从机器中删除。可以使用yarn logs -applicationId 命令,来查看日志yarn logs命令,会打印出application对应的所有container的日志出来,当然,因为日志是在hdfs上的,我们自然也可以通过hdfs的命令行来直接从hdfs中查看日志,日志在hdfs中的目录,可以通过查看yarn.nodemanager.remote-app-log-dir和yarn.nodemanager.remote-app-log-dir-suffix属性来获知。
如果 打开日志聚合(使用 yarn.log-aggregation-enable配置),容器日志将复制到HDFS中,而本地计算机上的日志将被删除。查看日志可以通过 yarn logs 命令从群集中的任何位置查看。
yarn logs -applicationId
如果 日志聚合未打开 时,日志将保存在每台计算机上的本地YARN_APP_LOGS_DIR,通常配置为 /tmp/logs 或 $HADOOP_HOME/logs/userlogs,取决于Hadoop版本和安装配置。
yarn-site.xml中有几个配置项与日志的保存与删除,本地job执行文件的保留与删除有关。若不做配置,日志和job.jar会在application执行结束后被直接删除掉。
yarn.log-aggregation-enable true 执行结束后收集(聚合)各个container本地的日志
yarn.nodemanager.remote-app-log-dir /app-logs 聚合日志后在hdfs的存放地址
yarn.nodemanager.remote-app-log-dir-suffix logs 聚合日志存放的后缀,存放地址由 ${remote-app-log-dir}/${user}/{thisParam}构成
yarn.log-aggregation.retain-seconds 2592000 聚合日志在hdfs上的保留时间,以秒为单位,到时后被删除,保留30天后删除
yarn.log.server.url http://hostname:19888/jobhistory/logs log server的地址
yarn.nodemanager.local-dirs /hadoop/yarn/local 存放 application 运行的本地文件(计算过程中的中间数据存储)的根目录,执行完毕后删除,按用户名存储
yarn.nodemanager.log-dirs /hadoop/yarn/log 存放 container 运行的本地日志的根目录,执行完毕后删除,按用户名存储
yarn.nodemanager.log.retain-seconds 604800 本地日志的保留时间,只有aggregation没有enable时才生效
yarn.nodemanager.delete.debug-delay-sec 600 yarn 的 DeletionService 在任务结束多长时间后,删除本地化的日志(yarn.nodemanager.local-dirs)和container的运行日志(yarn.nodemanager.log-dirs)。 这个时间最好设置的大一点。
要实现日志聚集,只需要在yarn-site.xml中配置如下几个参数:
(1) yarn.log-aggregation-enable
参数解释:是否启用日志聚集功能。
默认值:false
(2) yarn.log-aggregation.retain-seconds
参数解释:在HDFS上聚集的日志最多保存多长时间。
默认值:-1
(3) yarn.log-aggregation.retain-check-interval-seconds
参数解释:多长时间检查一次日志,并将满足条件的删除,如果是0或者负数,则为上一个值的1/10。
默认值:-1
(4) yarn.nodemanager.remote-app-log-dir
参数解释:当应用程序运行结束后,日志被转移到的HDFS目录(启用日志聚集功能时有效)。
默认值:/tmp/logs
<property>
<name>yarn.log-aggregation-enablename>
<value>truevalue>
property>
<property>
<name>yarn.nodemanager.remote-app-log-dirname>
<value>/tmp/logsvalue>
property>
<property>
<name>yarn.log-aggregation.retain-secondsname>
<value>604800value>
property>
<property>
<name>yarn.nodemanager.log-dirsname>
<value>file:/mnt/ddb/2/hadoop/nmvalue>
property>
<property>
<name>yarn.nodemanager.delete.debug-delay-secname>
<value>0value>
property>
root@hadoop01:/opt/hadoop-2.7.7/hadoop/nm/application_1471515078641_0007
# ls
container_1471515078641_0007_01_000001
container_1471515078641_0007_01_000002
container_1471515078641_0007_01_000003
注:其中container_1471515078641_0007_01_000001为RM为application_1471515078641_0007分配的第一个container,即AM所在的container,第一个container都是运来启动AM的,containerID形式为,container_APPID_01_000001,你在RM日志文件里面根据container_APPID搜索即可看到为该APPID分配的container的分布情况及生命周期。
drwxrwx--- - root supergroup 0 2016-08-18 18:29 /tmp/logs/root/logs/application_1471515078641_0002
drwxrwx--- - root supergroup 0 2016-08-18 19:10 /tmp/logs/root/logs/application_1471515078641_0003
drwxrwx--- - root supergroup 0 2016-08-18 19:17 /tmp/logs/root/logs/application_1471515078641_0004
yarn logs --applicationId
1.配置文件上增加配置信息
yarn-site.xml
<!-- 日志聚集功能使能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日志保留时间设置7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
<property>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>/tmp/logs</value>
</property>
<property>
<name>yarn.log.server.url</name>
<value>http://100.86.40.113:19888/jobhistory/logs/</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>106800</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>100.86.40.113:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>100.86.40.113:19888</value>
</property>
mapred-site.xml
<property>
<!-- 表示提交到hadoop中的任务采用yarn来运行,要是已经有该配置则无需重复配置 -->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<!--日志监控服务的地址,一般填写为nodenode机器地址 -->
<name>mapreduce.jobhistroy.address</name>
<value>100.86.40.113:10020</value>
</property>
<property>
<name>mapreduce.jobhistroy.webapp.address</name>
<value>100.86.40.113:19888</value>
</property>
2.启动JobHistoryServer
# hadoop的bin目录下执行
sbin/mr-jobhistory-daemon.sh start historyserver
3.访问yarnweb页面查看日志