コード例 #1
0
  private static File detectHadoopConfigurationDirectory(
      File command, File temporary, Map<String, String> envp) throws IOException {
    assert command != null;
    assert temporary != null;
    assert envp != null;

    prepareClasspath(temporary, ConfigurationDetecter.class);
    File resultOutput = new File(temporary, PATH_SUBPROC_OUTPUT);

    List<String> arguments = new ArrayList<String>();
    arguments.add(command.getAbsolutePath());
    arguments.add(ConfigurationDetecter.class.getName());
    arguments.add(resultOutput.getAbsolutePath());

    ProcessBuilder processBuilder = new ProcessBuilder(arguments);
    processBuilder.environment().clear();
    processBuilder.environment().putAll(envp);
    processBuilder.environment().put(ENV_HADOOP_CLASSPATH, temporary.getPath());

    Process process = processBuilder.start();
    try {
      Thread redirectOut = redirect(process.getInputStream(), System.out);
      Thread redirectErr = redirect(process.getErrorStream(), System.err);
      try {
        int exit = process.waitFor();
        redirectOut.join();
        redirectErr.join();
        if (exit != 0) {
          throw new IOException(
              MessageFormat.format(
                  "Failed to execute Hadoop command (exitcode={1}): {0}",
                  arguments, String.valueOf(exit)));
        }
      } catch (InterruptedException e) {
        throw (IOException)
            new InterruptedIOException(
                    MessageFormat.format(
                        "Failed to execute Hadoop command (interrupted): {0}", arguments))
                .initCause(e);
      }
    } finally {
      process.destroy();
    }
    if (resultOutput.isFile() == false) {
      throw new IOException(
          MessageFormat.format("Failed to restore Hadoop configuration path: {0}", resultOutput));
    }
    File path = ConfigurationDetecter.read(resultOutput);
    return path;
  }