Problem scenario
You run spark-shell in a Debian distribution of Linux (e.g., Ubuntu) but you receive this error:
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 64
at java.util.jar.JarFile.match(java.base@9-internal/JarFile.java:983)
at java.util.jar.JarFile.checkForSpecialAttributes(java.base@9-internal/JarFile.java:1017)
at java.util.jar.JarFile.isMultiRelease(java.base@9-internal/JarFile.java:399)
at java.util.jar.JarFile.getEntry(java.base@9-internal/JarFile.java:524)
at java.util.jar.JarFile.getJarEntry(java.base@9-internal/JarFile.java:480)
at jdk.internal.util.jar.JarIndex.getJarIndex(java.base@9-internal/JarIndex.java:114)
at jdk.internal.loader.URLClassPath$JarLoader$1.run(java.base@9-internal/URLClassPath.java:640)
at jdk.internal.loader.URLClassPath$JarLoader$1.run(java.base@9-internal/URLClassPath.java:632)
at java.security.AccessController.doPrivileged(java.base@9-internal/Native Method)
at jdk.internal.loader.URLClassPath$JarLoader.ensureOpen(java.base@9-internal/URLClassPath.java:631)
at jdk.internal.loader.URLClassPath$JarLoader.<init>(java.base@9-internal/URLClassPath.java:606)
at jdk.internal.loader.URLClassPath$3.run(java.base@9-internal/URLClassPath.java:386)
at jdk.internal.loader.URLClassPath$3.run(java.base@9-internal/URLClassPath.java:376)
at java.security.AccessController.doPrivileged(java.base@9-internal/Native Method)
at jdk.internal.loader.URLClassPath.getLoader(java.base@9-internal/URLClassPath.java:375)
at jdk.internal.loader.URLClassPath.getLoader(java.base@9-internal/URLClassPath.java:352)
at jdk.internal.loader.URLClassPath.getResource(java.base@9-internal/URLClassPath.java:218)
at jdk.internal.loader.BuiltinClassLoader$3.run(java.base@9-internal/BuiltinClassLoader.java:463)
at jdk.internal.loader.BuiltinClassLoader$3.run(java.base@9-internal/BuiltinClassLoader.java:460)
at java.security.AccessController.doPrivileged(java.base@9-internal/Native Method)
at jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(java.base@9-internal/BuiltinClassLoader.java:459)
at jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(java.base@9-internal/BuiltinClassLoader.java:406)
at jdk.internal.loader.BuiltinClassLoader.loadClass(java.base@9-internal/BuiltinClassLoader.java:364)
at jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(java.base@9-internal/ClassLoaders.java:184)
at java.lang.ClassLoader.loadClass(java.base@9-internal/ClassLoader.java:419)
at sun.launcher.LauncherHelper.loadMainClass(java.base@9-internal/LauncherHelper.java:585)
at sun.launcher.LauncherHelper.checkAndLoadMain(java.base@9-internal/LauncherHelper.java:497)
How do you solve this?
Solution
Use Java version 8 not version 9.
Option 1
One option would be to uninstall Java (version 9) and reinstall Java (version 8). (You can view this posting for installing Java; make sure you make necessary changes so you install version 8.)
Option 2
If you have both installed and you are using Ubuntu, you can use this command:
sudo update-alternatives --config java
# To the prompt you will see, respond with the integer associated with Java 8 and press enter.