如何在hadoop集群环境中提取.gz文件?

时间:2016-09-20 07:03:14

标签: hadoop

如何在hadoop集群环境中提取.gz文件,通过java代码而不将文件复制到本地(通过代码直接在hadoop中提取)?

3 个答案:

答案 0 :(得分:0)

" gunzip -k file.gz "通常用于解压缩原始.gz文件的.gz文件,这是你想要的吗?

答案 1 :(得分:0)

考虑你的.gz文件中有一个文件,你可以这样做:

Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
Path inFile = new Path(argv[0]);
Path outFile = new Path(argv[1]);

FSDataInputStream in = fs.open(inFile);
org.apache.hadoop.io.compress.GzipCodec.GzipInputStream gis = new org.apache.hadoop.io.compress.GzipCodec.GzipInputStream(in);
FSDataOutputStream out = fs.create(outFile);

doCopy(gis, out);

public static void doCopy(FSDataInputStream is, FSDataOutputStream os) throws Exception {
    int oneByte;
    while ((oneByte = is.read()) != -1) {
        os.write(oneByte);
    }
    os.close();
    is.close();
}

答案 2 :(得分:0)

另一种方法是,您可以创建一个shell脚本,并在需要时运行相同的脚本。或者您尝试在代码中实现终端命令。

如果您想从终端进行操作,可以运行此命令

gzip [-acdfhlLnNrtvV19] [-S suffix] [name ...] gunzip [-acfhlLnNrtvV] [-S suffix] [name ...]

来源:https://www.techonthenet.com/linux/commands/gzip.php