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 中正确压缩和上传。
你似乎没有关闭流。
您有两个选择:
- 通过将 true 作为第四个参数传递给 copyBytes 来自动关闭它们
- 手动关闭它们,例如
outStream.close()
我的本地有一个.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 中正确压缩和上传。
你似乎没有关闭流。 您有两个选择:
- 通过将 true 作为第四个参数传递给 copyBytes 来自动关闭它们
- 手动关闭它们,例如
outStream.close()