如何在hdfs上使用java压缩文件

时间:2014-05-12 20:52:58

标签: java hadoop hdfs

我是hdfs / hadoop的新手,需要知道如何压缩hdfs目录中的文件 HDFS://沙箱:8020 /一些/路径

我试过了

      Path p = new Path("/my/path/test1.gz");
      FSDataOutputStream os = fs.create(p);

      GZIPOutputStream gzipOs = new GZIPOutputStream(new BufferedOutputStream(os));

      Path filePath = file.getPath();
      FSDataInputStream is = fs.open(filePath);

      System.out.println("Writing gzip");

      byte[] buffer = new byte[1024];
      int len;
      while((len= is.read(buffer)) != -1){
        gzipOs.write(buffer, 0, len);
      }
      //close resources
      is.close();
      gzipOs.close();

但它不起作用。

有什么建议吗?提前谢谢。

1 个答案:

答案 0 :(得分:1)

以下代码来自Tom White的权威指南。

public class StreamCompressor {
  public static void main(String[] args) throws Exception {

  String codecClassname = args[0];
  Class<?> codecClass = Class.forName(codecClassname);
  Configuration conf = new Configuration();
  CompressionCodec codec = (CompressionCodec)
  ReflectionUtils.newInstance(codecClass, conf);
  CompressionOutputStream out = codec.createOutputStream(System.out);
  IOUtils.copyBytes(System.in, out, 4096, false);
  out.finish();
 }
}