Hadoop垃圾回收站与YARN日志聚合

垃圾回收站

在HDFS里,回收站功能开启后,删除文件时,不会真正的删除,暂时是放入回收站.trash中,回收站里的文件可以快速恢复。可以设置一个时间阈值,当回收站里文件的存放时间超过这个阈值或是回收站被清空时,文件才会被彻底删除,并且释放占用的数据块。Hadoop回收站trash,默认是关闭的。

 

将core-site.xml内fs.trash.interval参数修改为需要回收站保留的时长。

    fs.trash.interval

    4320

 

默认是0 单位:分钟(这里设置的为4320=3*24*60,即三天保留时间)。

 

恢复数据:

hdfs dfs –mv 回收站内数据目录 要恢复到的hdfs目录

 

清空回收站:

·hdfs dfs –expunge

·hdfs dfs –rmr /user/user01/.Trash/*

YARN日志清理

YARN日志

YARN中的id种类繁多,比较乱,下面整理下yarn中常出现的几种id:

 

1)jobId

描述:出自MapReduce,对作业的唯一标识。

格式:job_${clusterStartTime}_${jobid}

例子:job_1498552288473_2742

 

2)applicationId

描述:在yarn中对作业的唯一标识。

格式:application_${clusterStartTime}_${applicationId}

例子:application_1498552288473_2742

 

3)taskId

描述:作业中的任务的唯一标识

格式:task_${clusterStartTime}_${applicationId}_[m|r]_${taskId}

例子:task_1498552288473_2742_m_000000、task_1498552288473_2742_r_000000

 

4)attempId

描述:任务尝试执行的一次id

格式:attempt_${clusterStartTime}_${applicationId}_[m|r]_${taskId}_${attempId}

例子:attempt_1498552288473_2742_m_000000_0

 

5)appAttempId

描述:ApplicationMaster的尝试执行的一次id。

格式:appattempt_${clusterStartTime}_${applicationId}_${appAttempId}

例子:appattempt_1498552288473_2742_000001

 

6)containerId:

描述:container的id

格式:

container_e*epoch*_${clusterStartTime}_${applicationId}_${appAttempId}_${containerId}

例子:

container_e20_1498552288473_2742_01_000032,

container_1498552288473_2742_01_000032

 

yarn中的日志可分为服务类日志和任务日志两大类:

  1. 服务类日志

诸如ResourceManager、NodeManager等系统自带的服务输出来的日志默认存放在

$HADOOP_HOME/logs目录下,此参数可通过参数YARN_LOG_DIR指定(yarn-env.sh配置文件,当前配置为/e3base/hadoop/logs/)。比如resourcemanager的输出日志为

yarn-${USER}-resourcemanager-${hostname}.log,其中${USER}是指启动resourcemanager进程的用户,${hostname}是resourcemanager进程所在的主机的hostname,nodemanager的输出日志格式为:yarn-${USER}-nodemanager-${hostname}.log,这类日志可以查看当前resourcemanager和nodemanager两个服务的运行情况。

  1. 任务日志
  1. 作业的统计日志:

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

 

mapreduce.jobhistory.intermediate-done-dir

/user/history/idone

mapred-site.xml

 

 

mapreduce.jobhistory.done-dir

/user/history/done

 

 

  1. 作业的运行日志:

Container日志包含ApplicationMaster日志和普通Task日志等信息,主要包含container的启动脚本,还有container的运行日志。默认情况下,这些日志信息存放在${HADOOP_HOME}/logs/userlogs目录下,我们可以通过下面的配置进行修改。

 

yarn-site.xml

yarn.nodemanager.log-dirs

/chunkdata01/yarn/logs,/chunkdata02/yarn/logs,/chunkdata03/yarn/logs,

/chunkdata04/yarn/logs,/chunkdata05/yarn/logs,/chunkdata06/yarn/logs,

/chunkdata08/yarn/logs,/chunkdata09/yarn/logs, /chunkdata10/yarn/logs,

/chunkdata11/yarn/logs,/chunkdata12/yarn/logs

 

 

yarn.nodemanager.log-dirs该参数为存储container容器日志的位置,一个应用程序的本地化日志目录将在${yarn.nodemanager.log-dirs}/application_${appid}中找到。单个容器的日志目录将在其子目录中,在名为的目container_{$contid}录中。每个容器目录将包含由该容器生成的文件stderr, stdin,和 syslog信息,如下图:

 

日志聚合

从上面作业的运行日志中可以发现,container的日志在一台机器的12块盘上都会存在日志,而且并不知道container的日志会在哪个盘上,默认情况下,每块盘上都会创建相同的applicationid,而且applicationid中都会创建相同的containerid,但是并不是每个container中都会存在日志,这块由container自己的机制选择往哪个container目录中写入日志,其他的container目录则为空。这在一定程度上导致了想查看任务的运行日志比较困难。

日志的聚合功能可以解决这个问题。

 

 

        yarn.log-aggregation-enable

        true

yarn-site.xml

 

 

        yarn.nodemanager.remote-app-log-dir

        /tmp/logs

        yarn.nodemanager.remote-app-log-dir-suffix

        logs

 

 

该参数为开启yarn日志聚合功能(默认关闭),会把各nodemanager上的applicaion的所有盘上的container上传到hdfs,hdfs路径由一下两个参数决定:

 

经过参数修改后:上传到的hdfs路径为:/tmp/logs/${user}/logs(默认位置)

 

日志聚合机制:

Hadoop垃圾回收站与YARN日志聚合_第1张图片

 

        mapreduce.jobhistory.max-age-ms

        604800000

        yarn.log-aggregation.retain-seconds

        86400

日志清理

第一个参数为保留hdfs路径/user/history/done下日志的的时间为:1周。

第二个参数为保留hdfs路径/tmp/logs/${user}/logs下日志的时间为:1天。

服务器上的本地日志在任务执行完进行日志聚合之后会自动进行删除。

该参数指:多长时间检查一次日志,并将满足条件的删除,如果是0或者负数,则为上一个值得1/10,已经配置为21600

        yarn.log-aggregation.retain-check-interval-seconds

        21600

(15分钟)。

 

 

        yarn.nodemanager.log.retain-seconds

        10800

 

该参数指:以秒为单位保留用户日志的时间。仅当日志聚合被禁用时才适用。

 

        yarn.nodemanager.log-aggregation.roll-monitoring-interval-seconds

        -1

 

该参数指:定义NodeManager上传日志文件的频率。默认值为-1。默认情况下,日志将在应用程序完成时上载。通过设置此配置,可以在应用程序运行时定期上传日志。最小滚动间隔秒可以设置为3600秒。

 

 

你可能感兴趣的:(Hadoop)