HDFS解压含有多个文件的gz压缩文件,急救啊!

无边的绿波 2013-05-30 03:54:04
Java程序中解压一个hdfs上的一个gz后缀的压缩文件,当压缩文件中有多个文件的时候,会解压到一个文件里面造成数据的混乱,该如何处理。先行谢过,望大妞们指点迷津。
代码如下所示:
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.io.compress.CompressionCodec;
import org.apache.hadoop.io.compress.CompressionCodecFactory;

public class FileDecompressor {

public static void main(String[] args) throws Exception {
String uri = "hdfs://namenode:8020/user/wb/data/test/TempDir.gz";
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI.create(uri), conf);

Path inputPath = new Path(uri);
CompressionCodecFactory factory = new CompressionCodecFactory(conf);
CompressionCodec codec = factory.getCodec(inputPath);
if (codec == null) {
System.err.println("No codec found for " + uri);
System.exit(1);
}
String outputUri = CompressionCodecFactory.removeSuffix(uri,
codec.getDefaultExtension());
FileSystem.get(URI.create(outputUri), conf) ;
InputStream in = null;
OutputStream out = null ;
try {
in = codec.createInputStream(fs.open(inputPath));
out = fs.create(new Path(outputUri));
IOUtils.copyBytes(in, out, conf);
} finally {
IOUtils.closeStream(in);
IOUtils.closeStream(out);
}
}
}

急救,求大神指点一二!
...全文
729 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
无边的绿波 2013-12-03
  • 打赏
  • 举报
回复
最后使用7z进行文件的解压!
撸大湿 2013-05-30
  • 打赏
  • 举报
回复
这个代码很眼熟,是不是权威指南里的例子? 这个例子只能解决HDfs中单个大文件的流读写式的解压缩 内嵌套GZIP文件的解压缩还是用JAVA来解决吧 研究一下这个支持内嵌套解压的本地文件解压方法:http://blog.csdn.net/clskkk2222/article/details/7034426 本地读取方法需要改成hadoop.fs.FileSystem

20,808

社区成员

发帖
与我相关
我的任务
社区描述
Hadoop生态大数据交流社区,致力于有Hadoop,hive,Spark,Hbase,Flink,ClickHouse,Kafka,数据仓库,大数据集群运维技术分享和交流等。致力于收集优质的博客
社区管理员
  • 分布式计算/Hadoop社区
  • 涤生大数据
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧