hadoop中是否有底层api允许多个reduce任务在不同的机器上运行,以组装一个hdfs作为它们的计算输出?例如,在作业开始时创建一个存根hdfs文件,然后每个reducer创建一个可变数量的数据块作为输出,并根据特定顺序将它们分配给该文件
qhhrdooz1#
答案是否定的,这对于一个罕见的用例来说是不必要的复杂化。你应该做什么选项1-在hadoop命令的末尾添加一些代码
int result = job.waitForCompletion(true) ? 0 : 1; if (result == 0) { // status code OK // ls job output directory, collect part-r-XXXXX file names // create HDFS readers for files // merge them in a single file in whatever way you want }
所有必需的方法都存在于hadoop文件系统api中。选项2-添加作业以合并文件您可以创建一个通用hadoop作业,该作业接受目录名作为输入,并将所有内容按原样传递给单个reducer,从而将结果合并到一个输出文件中。把这份工作和你的主要工作联系起来。对于大的输入,这将更快地工作。
b1payxdu2#
如果您希望合并本地输出文件,可以使用hadoop命令getmerge将多个reduce任务文件合并到一个本地输出文件中,下面是相同的命令。
hadoop fs -getmerge /output/dir/on/hdfs/ /desired/local/output/file.txt
2条答案
按热度按时间qhhrdooz1#
答案是否定的,这对于一个罕见的用例来说是不必要的复杂化。
你应该做什么
选项1-在hadoop命令的末尾添加一些代码
所有必需的方法都存在于hadoop文件系统api中。
选项2-添加作业以合并文件
您可以创建一个通用hadoop作业,该作业接受目录名作为输入,并将所有内容按原样传递给单个reducer,从而将结果合并到一个输出文件中。把这份工作和你的主要工作联系起来。
对于大的输入,这将更快地工作。
b1payxdu2#
如果您希望合并本地输出文件,可以使用hadoop命令getmerge将多个reduce任务文件合并到一个本地输出文件中,下面是相同的命令。