[
https://issues.apache.org/jira/browse/HADOOP-3665?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Lukas Vlcek updated HADOOP-3665:
--------------------------------
Attachment: HADOOP-3665.path
Here is simple patch. Please review it!
Still there are few questions/notes opened I think:
1) There is no clear way how to learn whether particular WritableComparator can
be instantiated or not. There should be some new interface introduced for
singletons.
2) It is not clear if key value can be of zero length. For NullWritable it make
sense but it has nothing to do with the fact that it is a singleton I think.
3) I found other two classes implementing WritableComparable having private or
protected constructor. These are ID and TaskID. Since they are both
WritableComparable they may be used as a key (I can not tell if there is any
point in such use case but technically it should be possible). This patch DOES
NOT fixes such use case in any way.
Giving these notes together I can see the following conclusion:
Going forward it should be possible to learn if WritableComparable:
a) can be used as a key
b) can have zero length
c) can be instantiated using constructor and if not then what is the way to get
the instance.
> WritableComparator newKey() fails for NullWritable
> --------------------------------------------------
>
> Key: HADOOP-3665
> URL: https://issues.apache.org/jira/browse/HADOOP-3665
> Project: Hadoop Core
> Issue Type: Bug
> Components: io
> Affects Versions: 0.16.0, 0.16.1, 0.16.2, 0.16.3, 0.16.4, 0.17.0
> Environment: n/a
> Reporter: Lukas Vlcek
> Priority: Minor
> Fix For: 0.19.0
>
> Attachments: HADOOP-3665.path
>
>
> It is not possible to use NullWritable as a key in order to suppress key
> value in output.
> Syndrome exception:
> Caused by: java.lang.IllegalAccessException: Class
> org.apache.hadoop.io.WritableComparator can not access a member of class
> org.apache.hadoop.io.NullWritable with modifiers "private"
> The problem is that NullWritable is a singleton and does not provide public
> non-parametric constructor. The following code in WritableComparator causes
> the exception: return (WritableComparable)keyClass.newInstance();
> Proposed simple solution is to use ReflectionUtils instead (it requires
> modification as well).
> This issue is probably related to HADOOP-2922
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.