MiniMRCluster does not utilize multiple local directories in "mapred.local.dir" -------------------------------------------------------------------------------
Key: HADOOP-2462 URL: https://issues.apache.org/jira/browse/HADOOP-2462 Project: Hadoop Issue Type: Bug Components: test Affects Versions: 0.15.0 Reporter: Konstantin Shvachko Fix For: 0.16.0 My hadoop-site.xml specifies 4 local directories {code} <property> <name>mapred.local.dir</name> <value>${hadoop.tmp.dir}/mapred/local1, ${hadoop.tmp.dir}/mapred/local2, ${hadoop.tmp.dir}/mapred/local3, ${hadoop.tmp.dir}/mapred/local4</value> </property> {code} and I am looking at MiniMRCluster.TaskTrackerRunner There are several things here: # localDirBase value is set to {code} "/tmp/h/mapred/local1, /tmp/h/mapred/local2, /tmp/h/mapred/local3, /tmp/h/mapred/local4" {code} and I get a hierarchy of directories with commas and spaces in the names. I think this was not designed to work with multiple dirs. # Further down, all new directories are generated with the same name {code} File ttDir = new File(localDirBase, Integer.toString(trackerId) + "_" + 0); {code} So in fact only one directory is created. I think the intension was to have i instead of 0 {code} File ttDir = new File(localDirBase, Integer.toString(trackerId) + "_" + i); {code} # On windows MiniMRCluster.TaskTrackerRunner in this case throws an IOException, which is silently ignored by all but the TestMiniMRMapRedDebugScript MiniMR tests. {code} java.io.IOException: Mkdirs failed to create /tmp/h/mapred/local1, /tmp/h/mapred/local2, /tmp/h/mapred/local3, /tmp/h/mapred/local4/0_0 at org.apache.hadoop.mapred.MiniMRCluster$TaskTrackerRunner.<init>(MiniMRCluster.java:124) at org.apache.hadoop.mapred.MiniMRCluster.<init>(MiniMRCluster.java:293) at org.apache.hadoop.mapred.MiniMRCluster.<init>(MiniMRCluster.java:244) at org.apache.hadoop.mapred.TestMiniMRClasspath.testClassPath(TestMiniMRClasspath.java:163) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at junit.framework.TestCase.runTest(TestCase.java:154) at junit.framework.TestCase.runBare(TestCase.java:127) at junit.framework.TestResult$1.protect(TestResult.java:106) at junit.framework.TestResult.runProtected(TestResult.java:124) at junit.framework.TestResult.run(TestResult.java:109) at junit.framework.TestCase.run(TestCase.java:118) at junit.framework.TestSuite.runTest(TestSuite.java:208) at junit.framework.TestSuite.run(TestSuite.java:203) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:478) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:344) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196) {code} I am marking it as "Major" because we actually do not test multiple local directories. Looks like it was introduced rather recently by HADOOP-1819. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.