将不同文件夹的map-reduce输出合并到单个文件夹中

时间:2013-11-14 14:11:47

标签: hadoop mapreduce apache-pig

我在几个文件夹的网格分割上有map-reduce输出。每个文件的格式相同。每个文件夹都有一堆文件: 示例:/ folderpath / folder1 / part-r-00001到/ folderpath / folder1 / part-r-00100 ... / folderpath / foldern / part-r-00001到/ folderpath / foldern / part-r-00100

将内容组合在一起的最简单方法是什么,即将文件聚合到单个文件夹中(我想稍后使用) / folderpath / merged / part-r-0000 * ... / folderpath / merged / part-r-000n

我可以想到从每个路径读取输出并读取关系联合的猪脚本然后转储它们。

任何其他选项/命令?

2 个答案:

答案 0 :(得分:1)

老实说,我只是使用hadoop fs命令编写一个简短的bash脚本。

hadoop fs -mv /source1/somefolder/.* /destination/somefolder
hadoop fs -mv /source2/somefolder/.* /destination/somefolder

为您需要移动的每个文件夹添加一行。

答案 1 :(得分:1)

使用Pig非常容易:

data = LOAD '/folderpath/folder*' USING PigStorage('\n');
STORE data INTO '/newfolderpath';

或者你可以使用hadoop shell的getmerge函数,但这会将所有东西都变成本地磁盘上的单个文件。

如果文件不是太大,这将是一种简单的方法将它变成HDFS上的单个文件:

hdfs dfs -cat /folderpath/folder* | hdfs dfs -copyFromLocal - /newfolderpath/file