Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Not A Problem
-
None
-
None
-
None
-
MS Windows
Description
When running JUnit-Tests on Windows with the MiniAccumuloCluster, the file bin\winutils.exe is needed, which is searched in the path, given by the system variable HADOOP_HOME. This worked fine with the MiniAccumuloCluster 1.4.4.
When I try the same with Accumulo 1.6, I get the error
14/10/24 16:57:40 ERROR util.Shell: Failed to locate the winutils binary in the hadoop binary path java.io.IOException: Could not locate executable C:\Users\jsbaue\AppData\Local\Temp\1414162594270-0\bin\winutils.exe in the Hadoop binaries. at org.apache.hadoop.util.Shell.getQualifiedBinPath(Shell.java:318) at org.apache.hadoop.util.Shell.getWinUtilsPath(Shell.java:333) at org.apache.hadoop.util.Shell.<clinit>(Shell.java:326) at org.apache.hadoop.util.StringUtils.<clinit>(StringUtils.java:76)
which basically says, that bin\winutils.exe is now searched in the temporary path, given to the MiniAccumuloCluster. When I try to put the file bin\winutils.exe in that path, I get an error, saying that the path has to be empty.
I fixed this problem by changing accumulo\minicluster\src\main\java\org\apache\accumulo\minicluster\impl\MiniAccumuloClusterImpl.java:
I exchanged Line 309-310:
// hadoop-2.2 puts error messages in the logs if this is not set builder.environment().put("HADOOP_HOME", config.getDir().getAbsolutePath());
with the following lines:
env = System.getProperty("hadoop.home.dir"); if(env == null) env = System.getenv("HADOOP_HOME"); // hadoop-2.2 puts error messages in the logs if this is not set if(env == null) env = config.getDir().getAbsolutePath(); builder.environment().put("HADOOP_HOME", env);
This fixes the bug on Windows. I did no checks on Linux.
Could you check, if you chould change this in the next version of the MiniAccumuloCluster or help me with an other solution? Thanks!