[ https://issues.apache.org/jira/browse/HADOOP-406?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12461953 ]
Dominik Friedrich commented on HADOOP-406: ------------------------------------------ Please ignore my previous comment. It worked after the upgrade only because there were no mapred errors that had to be logged. I should have read the all comments to figure out that the log appender causes this problem. > Tasks launched by tasktracker in separate JVM can't generate log output > ----------------------------------------------------------------------- > > Key: HADOOP-406 > URL: https://issues.apache.org/jira/browse/HADOOP-406 > Project: Hadoop > Issue Type: Bug > Components: mapred > Affects Versions: 0.4.0 > Reporter: Chris Schneider > Assigned To: Owen O'Malley > Attachments: HADOOP-406.patch > > > Child JVM's don't have access to logging config system properties. When the > child JVM gets launched, it doesn't inherit the Java system properties > hadoop.log.dir and hadoop.log.file (which are actually based on the Bash > environment variables $HADOOP_LOG_DIR and $HADOOP_LOGFILE). This means that > you get no log messages from the actual map/reduce tasks that are executing. > Stefan Groschupf reported this problem a while back: > ------------------------------------------------------------------------- > To: hadoop-dev@lucene.apache.org > From: Stefan Groschupf <[EMAIL PROTECTED]> > Subject: tasks can't log bug? > Date: Tue, 25 Jul 2006 19:26:17 -0700 > X-Virus-Checked: Checked by ClamAV on apache.org > Hi Hadoop developers, > I'm confused about the way logging works within map or reduce tasks. > Since tasks are launched in a new JVM the java system properties > "hadoop.log.dir" and "hadoop.log.file" are not passed to the new JVM. > This prevents the child process from logging properly. In fact you get: > java.io.FileNotFoundException: / (Is a directory) > at java.io.FileOutputStream.openAppend(Native Method) > at java.io.FileOutputStream.<init>(FileOutputStream.java:177) > at java.io.FileOutputStream.<init>(FileOutputStream.java:102) > at org.apache.log4j.FileAppender.setFile(FileAppender.java:289) > at > org.apache.log4j.RollingFileAppender.setFile(RollingFileAppender.java:165) > at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:163) > at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:256) > at > org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:132) > at > org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:96) > at > org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:654) > at > org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:612) > at > org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.j > 2006-07-25 15:59:07,553 INFO mapred.TaskTracker (TaskTracker.java:main(993)) > - Child > at > org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:415) > at > org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:441) > at > org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:4 > at org.apache.log4j.LogManager.<clinit>(LogManager.java:122) > at org.apache.log4j.Logger.getLogger(Logger.java:104) > at > org.apache.commons.logging.impl.Log4JLogger.getLogger(Log4JLogger.java:229) > at org.apache.commons.logging.impl.Log4JLogger.<init>(Log4JLogger.java:65) > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) > at > sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImp > at > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAcc > at java.lang.reflect.Constructor.newInstance(Constructor.java:494) > at > org.apache.commons.logging.impl.LogFactoryImpl.newInstance(LogFactoryImpl.java:529 > at > org.apache.commons.logging.impl.LogFactoryImpl.getInstance(LogFactoryImpl.java:235 > at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:370) > at org.apache.hadoop.mapred.TaskTracker.<clinit>(TaskTracker.java:44) > at org.apache.hadoop.mapred.TaskTracker$Child.main(TaskTracker.java:993) > We see several ways to solve this problem. First retrieve the properties > "hadoop.log.dir" and "hadoop.log.file" from the mother JVM and then pass them > to the child JVM as within the args parameter. > Second would be to access the environment variables "$HADOOP_LOG_DIR" and > "$HADOOP_LOGFILE" using System.getEnv (java 1.5). > Third there would be a more general solution. Taskrunner would resolve any > environment variables it found in "mapred.child.java.opts" by lookup the > value using System.getEnv(). > Eg: > unix: > export MAX_MEMORY = 200 > hadoop-site.xml: > <name>mapred.child.java.opts</name> > <value>-Xmx${MAX_MEMORY}</value> -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: https://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira