如何在hadoop集群环境中提取.gz文件,通过java代码而不将文件复制到本地(通过代码直接在hadoop中提取)?
答案 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 ...]