The org.apache.hadoop.io.WritableName
class mentioned in the exception stack trace has some useful methods.
From the doc:
Utility to permit renaming of Writable implementation classes without invalidiating files that contain their class name.
// Add an alternate name for a class.
public static void addName(Class writableClass, String name)
In your case you could call this before reading from your SequenceFiles:
WritableName.addName(com.vertebrates.fishes.FishWritable.class, "com.mammals.fishes.FishWritable");
This way, when attempting to read a com.mammals.fishes.FishWritable
from an old SequenceFile, the new com.vertebrates.fishes.FishWritable
class will be used.
PS: Why was the fish in the mammals package in the first place? ;)