1

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

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

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

任何其他选项/命令?

4

2 回答 2

1

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

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

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

于 2013-11-14T15:46:38.443 回答
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
于 2013-11-14T15:54:48.940 回答