gpt4 book ai didi

java - MultipleOutputs 与 SideEffectFile

转载 作者:可可西里 更新时间:2023-11-01 14:50:30 24 4
gpt4 key购买 nike

我想知道 MultipleOutputs 与 FSDataOutputStream 与 Task Side Effect File 之间在创建不同输出文件方面的优势/差异?

一个。使用多重输出:

MultipleOutputs mos;

void configure()
{
mos.new MultipleOutputs(conf);
}

reduce()
{
mos.getCollector("desired_path", reporter).collect(new Text(key), new Text(val));
}

使用 FSDataOutputream,我们将输出写入文件系统中的所需路径,如下所示:

    void configure()
{
fs = FileSystem.get(conf);
}


void reduce()
{

Path op = "/custom_path";
FSDataOutputStream dst = fs.create(op);
dst.writeBytes(t+" "+uidi+" "+str_sizeval);
}

使用任务副作用文件。在这里,我们使用 FSDataOutputStream 将输出写入由 FileOutputFormat.getWorkOutputPath() 返回的路径,而不是使用自定义的所需路径。

将所需输出写入输出路径以外的路径的最佳方法是什么?

最佳答案

a 和 c 或多或少是同一件事,并且与 b 相比具有明显的优势,因为它们由输出提交者管理。

将 b 与推测执行结合使用意味着您将得到一个错误(两件事试图写入同一个文件),或者可能损坏结果。

a & c 没有这个问题,因为它们正在输出到 HDFS 上的临时任务尝试文件夹,当任务尝试被提交时,其内容被移动到实际输出文件夹(因此你不会遇到问题投机执行)。

a 也是比 c 更好的选择,因为它管理文件的唯一性——每个文件都用一个额外的任务 ID 命名(例如“desired_pa​​th-r-00000”)。如果你使用 c,并且有两个 reducer 写入相同的失败名称,最后提交的任务将覆盖第一个提交的任务的内容,否则你会得到一个错误(我不确定是哪个)。

所以简而言之,a 是最好的选择。

关于java - MultipleOutputs 与 SideEffectFile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14406765/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com