Hi,
 I have a following issue in Hadoop 0.20.2. When i try to use inheritance
with WritableComparables the job is failing. Example If i create a base
writable called as shape

  public abstract class ShapeWritable<T> implements WritableComparable<T>
  {

  }

 Then extend this for a concrete class called CircleWritable . Now if my
mapper output is set as ShapeWritable in job configuration  and I write a
CircleWriable in collect.write() , the map fails with class mismatch. When
i looked into source code of MapTask.java , i saw the following code

*public** **synchronized** **void* collect(K key, V value,* **int* partition

                                     )* **throws* IOException {

      reporter.progress();

     * **if* (key.getClass() != keyClass) {

       * **throw** **new* IOException("Type mismatch in key from map:
expected "

                              + keyClass.getName() + ", recieved "

                              + key.getClass().getName());

      }

     * **if* (value.getClass() != valClass) {

       * **throw** **new* IOException("Type mismatch in value from map:
expected "

                              + valClass.getName() + ", recieved "

                              + value.getClass().getName());

      }
Here , we are matching directly classes which means inheritance don't work.
Can anyone tell why its implemented in this way? Is it changed in newer
version of Hadoop?


-- 
Join me at http://hadoopworkshop.eventbrite.com/

Reply via email to