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

Steve Loughran updated MAPREDUCE-5549:
--------------------------------------

    Attachment: MAPREDUCE-5549-001.patch

Patch with some changes from the original proposal

# check for {{job.isSuccess()}} performed in try/catch block, so that IOEs get 
caught.
# added new {{JOB_FAILED}} value; lets scripts & people interpret failure 
better 
I also took the opportunity to review the run method and patched the catch of 
Throwable in the parse phase to print Exception.toString, not 
Exception.getMessage, for the usual reasons.

Tests: no, none

> distcp app should fail if m/r job fails
> ---------------------------------------
>
>                 Key: MAPREDUCE-5549
>                 URL: https://issues.apache.org/jira/browse/MAPREDUCE-5549
>             Project: Hadoop Map/Reduce
>          Issue Type: Bug
>          Components: distcp, mrv2
>    Affects Versions: 3.0.0
>            Reporter: David Rosenstrauch
>         Attachments: MAPREDUCE-5549-001.patch
>
>
> I run distcpv2 in a scripted manner.  The script checks if the distcp step 
> fails and, if so, aborts the rest of the script.  However, I ran into an 
> issue today where the distcp job failed, but my calling script went on its 
> merry way.
> Digging into the code a bit more (at 
> https://svn.apache.org/repos/asf/hadoop/common/trunk/hadoop-tools/hadoop-distcp/src/main/java/org/apache/hadoop/tools/DistCp.java),
>  I think I see the issue:  the distcp app is not returning an error exit code 
> to the shell when the distcp job fails.  This is a big problem, IMO, as it 
> prevents distcp from being successfully used in a scripted environment.  IMO, 
> the code should change like so:
> Before:
> {code:title=org.apache.hadoop.tools.DistCp.java}
> //...
>   public int run(String[] argv) {
> //...
>     try {
>       execute();
>     } catch (InvalidInputException e) {
>       LOG.error("Invalid input: ", e);
>       return DistCpConstants.INVALID_ARGUMENT;
>     } catch (DuplicateFileException e) {
>       LOG.error("Duplicate files in input path: ", e);
>       return DistCpConstants.DUPLICATE_INPUT;
>     } catch (Exception e) {
>       LOG.error("Exception encountered ", e);
>       return DistCpConstants.UNKNOWN_ERROR;
>     }
>     return DistCpConstants.SUCCESS;
>   }
> //...
> {code}
> After:
> {code:title=org.apache.hadoop.tools.DistCp.java}
> //...
>   public int run(String[] argv) {
> //...
>     Job job = null;
>     try {
>       job = execute();
>     } catch (InvalidInputException e) {
>       LOG.error("Invalid input: ", e);
>       return DistCpConstants.INVALID_ARGUMENT;
>     } catch (DuplicateFileException e) {
>       LOG.error("Duplicate files in input path: ", e);
>       return DistCpConstants.DUPLICATE_INPUT;
>     } catch (Exception e) {
>       LOG.error("Exception encountered ", e);
>       return DistCpConstants.UNKNOWN_ERROR;
>     }
>     if (job.isSuccessful()) {
>       return DistCpConstants.SUCCESS;
>     }
>     else {
>       return DistCpConstants.UNKNOWN_ERROR;
>     }
>   }
> //...
> {code}



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Reply via email to