aws s3 とローカル hdfs の間でファイルをコピーする必要があります。distcp Java API を使用しようとしましたが、問題は distcp の最後にあり、System.exit() と呼ばれ、アプリも停止しました。コピーするフォルダー/ファイルと私は複数のスレッドを使用しました。各スレッドはdistcpコマンドを実行し、distcpを終了した最初のスレッドがアプリを停止し、残りのdistcpを停止します。これを回避する他の方法はありますか、私はできることを知っていますコピーを行うために独自の MR ジョブを作成するが、他のオプションがあるかどうかを知りたい
私のコード:
List<Future<Void>> calls = new ArrayList<Future<Void>>();       
for (String dir : s3Dirs) {
    final String[] args = new String[4];
    args[0] = "-log";   
    args[1] = LOG_DIR;
    args[2] = S3_DIR;
    args[3] = LOCAL_HDFS_DIR
    calls.add(_exec.submit(new Callable<Void>() {
       @Override
       public Void call() throws Exception {                
         try {
        DistCp.main(args);      <-- Distcp command          
         } catch (Exception e) {
        System.out.println("Failed to copy files from " + args[2] + " to " + args[3]);
         }
         return null;
    }
    }));            
}
for (Future<Void> f : calls) {
    try {
        f.get();
    } catch (Exception e) {
        LOGGER.error("Error while distcp", e);
    }   
}
Distcp main()
public static void main(String argv[]) {
        int exitCode;
        try {
          DistCp distCp = new DistCp();
          Cleanup CLEANUP = new Cleanup(distCp);
          ShutdownHookManager.get().addShutdownHook(CLEANUP,
            SHUTDOWN_HOOK_PRIORITY);
          exitCode = ToolRunner.run(getDefaultConf(), distCp, argv);
        }
        catch (Exception e) {
          LOG.error("Couldn't complete DistCp operation: ", e);
          exitCode = DistCpConstants.UNKNOWN_ERROR;
        }
        System.exit(exitCode);        <--- exit here
      }