我在几个文件夹的网格分割上有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
我可以想到从每个路径读取输出并读取关系联合的猪脚本然后转储它们。
任何其他选项/命令?
答案 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