Description
The guava classes go as a dependency for jobs using TableMapReduceUtil from the org.apache.hadoop.hbase.mapred package but the same doesn't happen for jobs using the same class from org.apache.hadoop.hbase.mapreduce package. Due to this, tasks of the mapreduce jobs that wants to communicate with a secure cluster fails. The stack trace of the failing tasks:
Error: java.lang.ClassNotFoundException: com.google.common.collect.ImmutableSet
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at org.apache.hadoop.hbase.ipc.SecureServer.<clinit>(SecureServer.java:96)
We just need to add the dependency on the guava classes in the mapreduce.TableMapReduceUtil class.