seqdirectory génère une erreur en mode MapReduce lors de l'utilisation de Mahout 1.0-SNAPSHOT avec Hadoop 2.2.0
-
21-12-2019 - |
Question
J'essaie d'exécuter la commande seqdirectory dans Mahout 1.0-SNAPSHOT avec Hadoop 2.2.0.En utilisant la commande :
seqdirectory -i input -o output
Trace de la pile:
Error: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at org.apache.hadoop.mapreduce.lib.input.CombineFileRecordReader.initNextRecordReader(CombineFileRecordReader.java:164)
at org.apache.hadoop.mapreduce.lib.input.CombineFileRecordReader.<init>(CombineFileRecordReader.java:126)
at org.apache.mahout.text.MultipleTextFileInputFormat.createRecordReader(MultipleTextFileInputFormat.java:43)
at org.apache.hadoop.mapred.MapTask$NewTrackingRecordReader.<init>(MapTask.java:491)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:734)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:339)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:162)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1491)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:157)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.apache.hadoop.mapreduce.lib.input.CombineFileRecordReader.initNextRecordReader(CombineFileRecordReader.java:155)
... 10 more
Caused by: java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.TaskAttemptContext, but class was expected
at org.apache.mahout.text.WholeFileRecordReader.<init>(WholeFileRecordReader.java:59)
... 15 more
Je pensais que c'était un problème dans Mahout 0.9 et qu'il avait été corrigé dans le coffre.Des indices sur la façon de gérer cela ?Je veux l'exécuter en mode MapReduce, donc -xm sequential n'est pas la réponse que je recherche.
La solution
Caused by: java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.TaskAttemptContext, but class was expected
Des erreurs comme celle-ci signifient toujours que vous exécutez quelque chose sur une version de quelque chose qui est différente de celle avec laquelle il a été compilé.Ici, vous n'avez pas compilé Mahout pour Hadoop 2.Par nature, il ne fonctionne pas avec Hadoop 2 sans quelques modifications de build.