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

Text file not getting compressed correct in HDFS

我的本地有一个.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. 通过将 true 作为第四个参数传递给 copyBytes 来自动关闭它们
  2. 手动关闭它们,例如outStream.close()