[ 
https://issues.apache.org/jira/browse/MAPREDUCE-2538?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Allen Wittenauer updated MAPREDUCE-2538:
----------------------------------------
    Fix Version/s:     (was: 0.24.0)
           Status: Patch Available  (was: Open)

> InputSampler.writePartitionFile() may write duplicate keys
> ----------------------------------------------------------
>
>                 Key: MAPREDUCE-2538
>                 URL: https://issues.apache.org/jira/browse/MAPREDUCE-2538
>             Project: Hadoop Map/Reduce
>          Issue Type: Bug
>    Affects Versions: 0.20.2
>         Environment: EMR.
>            Reporter: Michael White
>            Assignee: Devaraj K
>            Priority: Minor
>         Attachments: MAPREDUCE-2538.patch
>
>
> InputSampler.writePartitionFile() outputs the same key multiple times if the 
> input samples have enough of a given key to span multiple partitions.  There 
> is logic in the code that appears to try to avoid this, but seems incorrect:
> for(int i = 1; i < numPartitions; ++i) {
>   int k = Math.round(stepSize * i);
>   while (last >= k && comparator.compare(samples[last], samples[k]) == 0) {
>     ++k;
>   }
>   writer.append(samples[k], nullValue);
>   last = k;
> }
> The while loop condition "last >= k" is always false.  The sample comparison 
> after the && never occurs.
> It's not entirely clear what the correct fix is.  The current behavior is 
> arguably correct mathematically, though the while loop could be elided for 
> clarity.  If bug MAPREDUCE-1987 were fixed, it would be less of a problem 
> (for me at least), since that is where the non-uniqueness causes me problems.
> Alternatively, changing the while to:
> "if( last >= 0) {
>    while (comparator.compare(samples[last], samples[k]) >= 0)) {"
> or, optimized for skipping over many duplicates (but arguably less clear):
> "if (last >= 0) {
>    while (last >= k || comparator.compare(samples[last], samples[k]) >= 0)) {"
> would probably achieve what the original author intended.
> Perhaps the behavior could be selected by a parameter, e.g. "boolean unique".



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to