Je travaille sur certains programmes MapR. Ils sont généralement codés et testés sur Apache hadoop sur ma machine locale, et jar packé (avec dépendances) est téléchargé sur notre cluster sous Cloudera CDH4 (v4.4.1). Pour les deux situations, j'ai différents fichiers pom.xml pour faire des paquets. Maintenant, j'utilise Apache Avro pour sérialiser les données et la version stable actuelle 1.7.5 est impliquée. En mode local, je Avro-mapred pom.xml dépendanceComment Cloudera CDH4 fonctionne avec Avro?
<dependency>
<groupId>org.apache.avro</groupId>
<artifactId>avro-mapred</artifactId>
<version>1.7.5</version>
</dependency>
et il fonctionne bien sur Apache Hadoop.
En mode cluster, pour la dépendance pom.xml, une étiquette de classificateur est joint en annexe comme suggéré par CDH4 doc:
<classifier>hadoop1</classifier>
Mais ni hadoop1 ou hadoop2, erreur se produit. Pour tag hadoop1:
Error running child : java.lang.IncompatibleClassChangeError: Found interface org.apache.hadoop.mapreduce.TaskAttemptContext, but class was expected
at org.apache.avro.mapreduce.AvroKeyOutputFormat.getRecordWriter(AvroKeyOutputFormat.java:87)
at org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:597)
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:444)
at org.apache.hadoop.mapred.Child$4.run(Child.java:268)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1408)
at org.apache.hadoop.mapred.Child.main(Child.java:262)
Pour tag hadoop2,
Error running child : java.lang.NoSuchMethodError: org.apache.avro.generic.GenericData.createDatumWriter(Lorg/apache/avro/Schema;)Lorg/apache/avro/io/DatumWriter;
at org.apache.avro.mapreduce.AvroKeyRecordWriter.<init>(AvroKeyRecordWriter.java:53)
at org.apache.avro.mapreduce.AvroKeyOutputFormat$RecordWriterFactory.create(AvroKeyOutputFormat.java:78)
at org.apache.avro.mapreduce.AvroKeyOutputFormat.getRecordWriter(AvroKeyOutputFormat.java:104)
at org.apache.hadoop.mapred.ReduceTask.runNewReducer(ReduceTask.java:597)
at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:444)
at org.apache.hadoop.mapred.Child$4.run(Child.java:268)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1408)
at org.apache.hadoop.mapred.Child.main(Child.java:262)
Je programmation en utilisant les nouvelles MapReduce interface MapR1. Je suppose également que c'est un conflit avec la version avro installé et d'autres contacts avec notre administrateur de cluster seront atteints. Des idées, les gars?
Jamin
Salut Sean, Ce n'est pas encore résolu. Je compile actuellement avec MR1 en utilisant de nouvelles API mapreduce et notre CDH 4.4.1 est également configuré avec MR1. J'ai d'autres programmes sans avro fonctionnant avec succès sur le cluster. Comme avro n'est pas livré avec le gestionnaire CDH par défaut, il est installé manully plus tard. Peut-être que j'ai besoin d'un peu de dépannage sur cette progression de l'installation .. – caesar0301
Il semble que le problème est Avro. Avro est une bibliothèque donc n'a pas de place en soi dans Cloudera Manager. Il fait partie de Hadoop et fait donc partie de CDH. Je viens de réaliser que vous avez dit Avro 1.7.5; Je me souviens d'un problème lors de la mise à jour de 1.7.4 à 1.7.5 qui m'a empêché de mettre à jour, mais je ne pense pas que c'était cela. Je vous conseille de faire correspondre la version est CDH/Hadoop, directement, ce que je pense est 1.7.4. Cette erreur montre que l'Avro est construit pour Hadoop 1 mais rencontre Hadoop 2. –
C'est un début pour moi d'essayer avro donc la dernière version est utilisée. Je vais essayer vos conseils et donner un match sur ces deux versions. – caesar0301