假设我在HDFS上具有以下结构:
/dir1
/dir2
/Name1_2015/
file1.lzo
file2.lzo
file3.lzo
/Name2_2015
file1.lzo
file2.lzo
Name1_2015.lzo
我想合并“dir2”中每个目录的每个文件,并将结果附加到/dir1/DirName.lzo中的文件中
例如,对于/dir1/dir2/Name1_2015,我要合并file1.lzo,file2.lzo,file3.lzo并将其附加到/dir1/Name1_2015.lzo
每个文件都是LZO压缩的。
我该怎么做 ?
谢谢
最佳答案
如果您不太在意并行性,那么这里有个简单的例子:
for d in `hdfs dfs -ls /dir2 | grep -oP '(?<=/)[^/]+$'` ; do hdfs dfs -cat /dir2/$d/*.lzo | lzop -d | lzop | hdfs dfs -put - /dir1/$d.lzo ; done
您可以使用map-reduce并行提取所有文件。但是,如何从多个文件并行创建一个存档?据我所知,不可能同时从多个进程写入单个HDFS文件。因此,无论如何我们不可能提出一个单节点解决方案。
关于java - 合并HDFS上的多个LZO压缩文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31613056/