我有一个 .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条答案
按热度按时间fnatzsnv1#
你好像没有关闭溪流。您有两种选择:
通过将true作为第四个参数传递给copybytes来自动关闭它们
手动关闭,例如。
outStream.close()