让多个reduce任务将单个hdfs文件组装为输出

qrjkbowd  于 2021-05-27  发布在  Hadoop
关注(0)|答案(2)|浏览(416)

hadoop中是否有底层api允许多个reduce任务在不同的机器上运行,以组装一个hdfs作为它们的计算输出?
例如,在作业开始时创建一个存根hdfs文件,然后每个reducer创建一个可变数量的数据块作为输出,并根据特定顺序将它们分配给该文件

qhhrdooz

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,从而将结果合并到一个输出文件中。把这份工作和你的主要工作联系起来。
对于大的输入,这将更快地工作。

b1payxdu

b1payxdu2#

如果您希望合并本地输出文件,可以使用hadoop命令getmerge将多个reduce任务文件合并到一个本地输出文件中,下面是相同的命令。

hadoop fs -getmerge /output/dir/on/hdfs/ /desired/local/output/file.txt

相关问题