2017-07-19 1 views
1

J'ai un programme Hadoop MapReduce qui, dans une fonction créée automatiquement dans la phase Map, utilise Avro pour stocker des données avant de les envoyer à la phase de réduction. Quand je suis en cours d'exécution de la fonction, je reçois cette erreur:java.lang.IllegalAccessError lors de la création d'objets Avro à partir de propres fonctions dans MapReduce

Caused by: java.lang.IllegalAccessError: tried to access method org.apache.avro.specific.SpecificData.<init>()V from class com.example.myapp.avro.PointList 

Le type de données PointList a int s, mais il n'a pas eu du mal avec double s. Savez-vous ce qui cause cela?

Répondre

1

Citant les JavaDocs pour IllegalAccessError:

Thrown if an application attempts to access or modify a field, or to call a method that it does not have access to. Normally, this error is caught by the compiler; this error can only occur at run time if the definition of a class has incompatibly changed.

Il est très probable que le travail MapReduce a été développé et compilé avec une version de Avro puis après le déploiement dans le cluster Hadoop, il a commencé à utiliser un autre, incompatible version d'Avro à l'exécution. Je recommande d'examiner le classpath runtime pour voir s'il prend une version différente d'Avro que ce que vous attendiez.