在HDFS中未正确压缩文本文件

时间:2015-01-19 16:31:08

标签: hadoop hdfs bigdata codec

我的本​​地有一个.txt文件,我想将此文件压缩为.gz并将其上传到HDFS中的某个位置。

以下是我尝试的代码:

    String codecClassName = args[1];
    String source = args[2];
    String dest = args[3];

    InputStream in = new BufferedInputStream(new FileInputStream(source));
    Class<?> codecClass = Class.forName(codecClassName);

    Configuration conf = new Configuration();
    CompressionCodec codec = (CompressionCodec)ReflectionUtils.newInstance(codecClass, conf);

    FileSystem fs = FileSystem.get(URI.create(dest),conf);
    OutputStream out = fs.create(new Path(dest),new Progressable() {

        @Override
        public void progress() {
            System.out.println(".");
        }
    });

    CompressionOutputStream outStream = codec.createOutputStream(out);

    IOUtils.copyBytes(in, outStream, 4096,false);

以下是此代码中传递的参数值:

arg1(康复者的名字):org.apache.hadoop.io.compress.GzipCodec

arg2(我本地驱动器中的位置):/home/user/Demo.txt

arg3(HDFS中的位置):hdfs://localhost:8020/user/input/Demo.gz

当我运行此代码时,Demo.gz文件将在上述HDFS位置创建,但.gz文件的大小为0MB。

请让我知道为什么文件没有被正确压缩并上传到HDFS中。

1 个答案:

答案 0 :(得分:2)

你似乎没有关闭溪流。 您有两种选择:

  1. 将true作为第四个参数传递给copyBytes
  2. ,自动关闭它们
  3. 手动关闭它们,例如outStream.close()