合并hdfs上的压缩文件

n3h0vuf2  于 2021-06-02  发布在  Hadoop
关注(0)|答案(3)|浏览(993)

如何将hdfs上一个目录中的所有文件(我知道这些文件都已压缩)合并到一个压缩文件中,而不必通过本地计算机复制数据?例如,但不一定,使用pig?
例如,我有一个文件夹/data/input,其中包含文件part-m-00000.gz和part-m-00001.gz。现在我想将它们合并到一个文件/data/output/foo.gz中

frebpwbc

frebpwbc1#

如果将parallel设置为1-则将有一个输出文件。这可以通过两种方式实现:
在你的Pig里加上 set default_parallel 20; 但请注意,这会影响你的Pig的一切
改变并行为一个单一的操作,如 DISTINCT ID PARALLEL 1; 可以阅读更多关于并行功能的信息

8tntrjer

8tntrjer2#

我知道有一个选项可以使用“hdfs-dfs-getmerge”命令合并到本地文件系统。也许您可以使用它合并到本地文件系统,然后使用“hdfs-dfs-copyfromlocal”命令将其复制回hdfs。

t98cgbkg

t98cgbkg3#

我建议你看看(https://github.com/edwardcapriolo/filecrush),一个使用mapreduce在hdfs上合并文件的工具。它完全符合您所描述的,并提供了几个选项来处理压缩和控制输出文件的数量。

Crush --max-file-blocks XXX /data/input /data/output
``` `max-file-blocks` 表示每个输出文件的最大dfs块数。例如,根据文件:
默认值为8时,80个小文件(每个文件占dfs块的十分之一)将被分组到单个输出文件中,因为8*1/10=8个dfs块。如果有81个小文件,每个都是dfs块的十分之一,则将创建两个输出文件。一个输出文件包含41个文件的组合内容,第二个将包含其他40个文件的组合内容。包含许多小文件的目录将被转换为数量较少的较大文件,其中每个输出文件的大小大致相同。

相关问题