Index: common/ivy.xml =================================================================== --- common/ivy.xml (revision 1351573) +++ common/ivy.xml (working copy) @@ -84,6 +84,7 @@ + Index: common/src/java/org/apache/hadoop/hive/common/FileUtils.java =================================================================== --- common/src/java/org/apache/hadoop/hive/common/FileUtils.java (revision 1351573) +++ common/src/java/org/apache/hadoop/hive/common/FileUtils.java (working copy) @@ -18,16 +18,23 @@ package org.apache.hadoop.hive.common; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; import java.io.IOException; import java.net.URI; import java.util.BitSet; import java.util.List; +import org.apache.commons.compress.archivers.tar.TarArchiveEntry; +import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream; +import org.apache.commons.compress.compressors.gzip.GzipCompressorOutputStream; +import org.apache.commons.compress.utils.IOUtils; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; -import org.apache.hadoop.util.Shell.ShellCommandExecutor; /** * Collection of file manipulation utilities common across Hive. @@ -248,20 +255,27 @@ */ public static void tar(String parentDir, String[] inputFiles, String outputFile) throws IOException { - StringBuffer tarCommand = new StringBuffer(); - tarCommand.append("cd " + parentDir + " ; "); - tarCommand.append(" tar -zcvf "); - tarCommand.append(" " + outputFile); - for (int i = 0; i < inputFiles.length; i++) { - tarCommand.append(" " + inputFiles[i]); + TarArchiveOutputStream tOut = null; + + try { + tOut = new TarArchiveOutputStream( + new GzipCompressorOutputStream( + new BufferedOutputStream( + new FileOutputStream(new File(parentDir, outputFile))))); + + for (int i = 0; i < inputFiles.length; i++) { + File f = new File(inputFiles[i]); + TarArchiveEntry tarEntry = new TarArchiveEntry(f, f.getName()); + tOut.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU); + tOut.putArchiveEntry(tarEntry); + IOUtils.copy(new FileInputStream(f), tOut); + tOut.closeArchiveEntry(); + } + } finally { + if(tOut != null ) { + tOut.finish(); + tOut.close(); + } } - String[] shellCmd = {"bash", "-c", tarCommand.toString()}; - ShellCommandExecutor shexec = new ShellCommandExecutor(shellCmd); - shexec.execute(); - int exitcode = shexec.getExitCode(); - if (exitcode != 0) { - throw new IOException("Error tarring file " + outputFile - + ". Tar process exited with exit code " + exitcode); - } } } Index: ivy/libraries.properties =================================================================== --- ivy/libraries.properties (revision 1351573) +++ ivy/libraries.properties (working copy) @@ -33,6 +33,7 @@ commons-cli.version=1.2 commons-codec.version=1.4 commons-collections.version=3.2.1 +commons-compress.version=1.4.1 commons-configuration.version=1.6 commons-dbcp.version=1.4 commons-httpclient.version=3.0.1