Description
Ignite node fails to start if some , but not all 3 HADOOP_XXX_HOME variables are set (see trace below). This is caused by the following gap in Ignite logic:
org.apache.ignite.internal.processors.hadoop.HadoopClasspathUtils#exists , #isDirectory , #isReadable return true for empty String argument. For the unset location variables the value is empty String, but org.apache.ignite.internal.processors.hadoop.HadoopLocations#xxxxxExists gets true, so the location considered to be valid. This is the cause of the problem.
[06:09:42] Security status [authentication=off, tls/ssl=off] [06:17:23,822][ERROR][main][IgniteKernal] Got exception while starting (will rollback startup routine). java.lang.RuntimeException: class org.apache.ignite.IgniteCheckedException: Failed to resolve Hadoop JAR locations: Failed to get directory files [dir=] at org.apache.ignite.internal.processors.hadoop.HadoopClassLoader.addHadoopUrls(HadoopClassLoader.java:422) at org.apache.ignite.internal.processors.hadoop.HadoopClassLoader.<init>(HadoopClassLoader.java:134) at org.apache.ignite.internal.processors.hadoop.HadoopHelperImpl.commonClassLoader(HadoopHelperImpl.java:78) at org.apache.ignite.hadoop.fs.IgniteHadoopIgfsSecondaryFileSystem.start(IgniteHadoopIgfsSecondaryFileSystem.java:254) at org.apache.ignite.internal.processors.igfs.IgfsImpl.<init>(IgfsImpl.java:186) at org.apache.ignite.internal.processors.igfs.IgfsContext.<init>(IgfsContext.java:101) at org.apache.ignite.internal.processors.igfs.IgfsProcessor.start(IgfsProcessor.java:128) at org.apache.ignite.internal.IgniteKernal.startProcessor(IgniteKernal.java:1638) at org.apache.ignite.internal.IgniteKernal.start(IgniteKernal.java:900) at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start0(IgnitionEx.java:1799) at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start(IgnitionEx.java:1602) at org.apache.ignite.internal.IgnitionEx.start0(IgnitionEx.java:1042) at org.apache.ignite.internal.IgnitionEx.startConfigurations(IgnitionEx.java:964) at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:850) at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:749) at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:619) at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:589) at org.apache.ignite.Ignition.start(Ignition.java:347) at org.apache.ignite.startup.cmdline.CommandLineStartup.main(CommandLineStartup.java:302) Caused by: class org.apache.ignite.IgniteCheckedException: Failed to resolve Hadoop JAR locations: Failed to get directory files [dir=] at org.apache.ignite.internal.processors.hadoop.HadoopClassLoader.hadoopUrls(HadoopClassLoader.java:456) at org.apache.ignite.internal.processors.hadoop.HadoopClassLoader.addHadoopUrls(HadoopClassLoader.java:419) ... 18 more Caused by: java.io.IOException: Failed to get directory files [dir=] at org.apache.ignite.internal.processors.hadoop.HadoopClasspathUtils$SearchDirectory.files(HadoopClasspathUtils.java:344) at org.apache.ignite.internal.processors.hadoop.HadoopClasspathUtils.classpathForClassLoader(HadoopClasspathUtils.java:68) at org.apache.ignite.internal.processors.hadoop.HadoopClassLoader.hadoopUrls(HadoopClassLoader.java:453) ... 19 more