Hi Anthony,

On Wed, Jul 18, 2007 at 07:42:58PM -0700, Anthony D. Urso wrote:
>I have started to use the following log4j xml to send logs to both the
>mapreduce tasklog and to the syslog daemon.  Unfortunately, it creates
>a new log split in the tasklog for each log entry.
>
>Is this a problem with the TaskLogAppender?  If not, does anyone know
>method of tapping into the mapreduce logging that won't cause zillions
>of log splits to be created?
>

Tweak the following in your hadoop-site.xml (please see hadoop-defaults.xml for 
their descriptions):
mapred.userlog.purgesplits (set this to *false*)
mapred.userlog.num.splits (set this to 1)

hth,
Arun

>XML properties and an exception below:
>
><?xml version="1.0" encoding="UTF-8" ?>
><!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
><log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/";>
>    <!-- Log base level and above to syslog, for posterity's sake.
>    <appender name="syslog" class="org.apache.log4j.net.SyslogAppender">
>        <param name="SyslogHost" value="localhost" />
>        <param name="Facility" value="LOCAL5" />
>        <layout class="org.apache.log4j.PatternLayout"> 
>            <param name="ConversionPattern" value="%p %c: %m%n"/>
>        </layout> 
>    </appender>  -->
>    
>    <!-- Log everything to the task log. -->
>    <appender name="TLA" class="org.apache.hadoop.mapred.TaskLogAppender"> 
>        <param name="taskId" value="${hadoop.tasklog.taskid}"/>
>        <!-- keep alot, they are one line each -->
>        <param name="noKeepSplits" value="999999"/> 
>        <param name="totalLogFileSize" value="100"/> 
>        <param name="purgeLogSplits" value="true"/> 
>        <param name="logsRetainHours" value="4"/> 
>        <layout class="org.apache.log4j.PatternLayout"> 
>            <param name="ConversionPattern" value="%d %p %c: %m%n"/> 
>        </layout> 
>    </appender>
>    
>    <!-- A console logger for hadoop. -->
>    <appender name="console" class="org.apache.log4j.ConsoleAppender">
>        <layout class="org.apache.log4j.PatternLayout"> 
>            <param name="ConversionPattern" value="%d %p %c: %m%n"/>
>        </layout> 
>    </appender> 
>
>    <!-- Log task stuff tasklog and syslog -->
>    <logger name="com.example.package" additivity="false">
>        <level value="ALL" />
>        <!-- <appender-ref ref="syslog" /> -->
>        <appender-ref ref="TLA" />
>    </logger>
>
>    <!-- Log hadoop stuff as per the original log4j.properties. -->
>    <root>
>        <level value="INFO" />
>        <appender-ref ref="console" /> 
>    </root> 
></log4j:configuration
>>
>An exception, perhaps related...
>
>ERROR Failed to close the task's log with the exception: java.io.IOException: 
>Bad file descriptor
>       at java.io.FileOutputStream.writeBytes(Native Method)
>       at java.io.FileOutputStream.write(FileOutputStream.java:260)
>       at 
> java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
>       at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
>       at 
> org.apache.hadoop.mapred.TaskLog$Writer.writeIndexRecord(TaskLog.java:252)
>       at org.apache.hadoop.mapred.TaskLog$Writer.close(TaskLog.java:236)
>
>-- 
> Au
>
> PGP Key ID: 0x385B44CB
> Fingerprint: 9E9E B116 DB2C D734 C090  E72F 43A0 95C4 385B 44CB
>    "Maximus vero fugiens a quodam Urso, milite Romano, interemptus est"
>                                               - Getica 235

Reply via email to