我的本地有一个.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中。
答案 0 :(得分:2)
你似乎没有关闭溪流。 您有两种选择:
outStream.close()