假设我在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/

10-11 09:05