public int run ( String [ ] args ) { try { copy ( conf , Arguments . valueOf ( args , conf ) ) ; return 0 ; } catch ( IllegalArgumentException e ) { System . err . println ( StringUtils . stringifyException ( e ) + "\n" + usage ) ; ToolRunner . printGenericCommandUsage ( System . err ) ; return - 1 ; } catch ( InvalidInputException e ) { System . err . println ( StringUtils . stringifyException ( e ) + "\n" ) ; return - 1 ; } catch ( DuplicationException e ) { System . err . println ( StringUtils . stringifyException ( e ) ) ; return DuplicationException . ERROR_CODE ; } catch ( RemoteException e ) { final IOException unwrapped = e . unwrapRemoteException ( FileNotFoundException . class , AccessControlException . class , QuotaExceededException . class ) ; System . err . println ( StringUtils . stringifyException ( unwrapped ) ) ; return - 3 ; } catch ( Exception e ) { System . err . println ( "With failures, global counters are inaccurate; " + "consider running with -i" ) ; System . err . println ( "Copy failed: " + StringUtils . stringifyException ( e ) ) ; return - 999 ; } }
This is the main driver for recursively copying directories across file systems . It takes at least two cmdline parameters . A source URL and a destination URL . It then essentially does an ls - lR on the source URL and writes the output in a round - robin manner to all the map input files . The mapper actually copies the files allotted to it . The reduce is empty .