javax.security.auth.login.LoginException: unable to find LoginModule class
Hi,
I have been unable to invoke Mahout Jobs from Spring Hadoop.
Code:
<hdp:tool-runner id="mahout-tool"
tool-class="org.apache.mahout.cf.taste.hadoop.item.RecommenderJob" configuration-ref="hadoopConfiguration">
<hdp:arg value="-s SIMILARITY_LOGLIKELIHOOD" />
<hdp:arg value="-i user_item_pref.csv" />
<hdp:arg value="-o recommendations" />
</hdp:tool-runner>
When invoking a Mahout Job through the tool-runner, I get the following exception:
Code:
Caused by: java.lang.RuntimeException: java.io.IOException: failure to login
at org.apache.hadoop.mapreduce.JobContext.<init>(JobContext.java:82)
at org.apache.hadoop.mapreduce.Job.<init>(Job.java:50)
at org.apache.mahout.common.HadoopUtil.prepareJob(HadoopUtil.java:125)
at org.apache.mahout.common.AbstractJob.prepareJob(AbstractJob.java:470)
at org.apache.mahout.cf.taste.hadoop.preparation.PreparePreferenceMatrixJob.run(PreparePreferenceMatrixJob.java:74)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
at org.apache.mahout.cf.taste.hadoop.item.RecommenderJob.run(RecommenderJob.java:153)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
at org.springframework.data.hadoop.mapreduce.ToolExecutor.runTool(ToolExecutor.java:89)
at org.springframework.data.hadoop.mapreduce.ToolRunner.getObject(ToolRunner.java:39)
at org.springframework.data.hadoop.mapreduce.ToolRunner.getObject(ToolRunner.java:31)
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:142)
... 56 more
Caused by: java.io.IOException: failure to login
at org.apache.hadoop.security.UserGroupInformation.getLoginUser(UserGroupInformation.java:433)
at org.apache.hadoop.security.UserGroupInformation.getCurrentUser(UserGroupInformation.java:395)
at org.apache.hadoop.mapreduce.JobContext.<init>(JobContext.java:80)
... 67 more
Caused by: javax.security.auth.login.LoginException: unable to find LoginModule class: org/apache/hadoop/security/UserGroupInformation$HadoopLoginModule
at javax.security.auth.login.LoginContext.invoke(LoginContext.java:808)
at javax.security.auth.login.LoginContext.access$000(LoginContext.java:186)
at javax.security.auth.login.LoginContext$4.run(LoginContext.java:683)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680)
at javax.security.auth.login.LoginContext.login(LoginContext.java:579)
at org.apache.hadoop.security.UserGroupInformation.getLoginUser(UserGroupInformation.java:414)
... 69 more
I wonder if this issue is with the way Spring Hadoop uses classloaders to load the LoginModule. Hive had a similar issue:
https://issues.apache.org/jira/browse/HADOOP-7982
Thanks,
Thomas