had a bit of time so I give you a feedback:
-Your abstract classes should not override methods in interfaces if they don't implement something.
-You don't need to define methods in interfaces as abstract as they are implicitly
-If you write your own read and write methods, then inherit from the Writable interface and implement it as well
These are some minor things, so it won't affect your implementation too much.
1) Is using of reflection is a good idea to exploit internals of matrix format in time of convertion? Or it could be implemented simpler?
Do you have a concrete case where you want to use reflection?
2) I want to use HamaConfiguration class to register some custom converters between some matrix formats. Could anyone give me a starting point, where I can learn how Hadoop's configuration works?
I have given you the workflow of a configuration object here: https://issues.apache.org/jira/browse/HAMA-500?focusedCommentId=13253251&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13253251
But basically it is some kind of Map<String,String> which holds information. It is bootstrapped by the usual hama configuration XMLs in classpath, then a client will modify it. Afterwards it will be serialized to XML and distributed through the cluster to be available on each task.
If you want to register something, you can set the default in the configuration XML in hama's conf path and user can override it any time he wants to. Normally you would add helpers to your converter class that gets a configuration and some parameter that you want to set into it (See FileInputFormat.addInputPath for example).