Hadoop的减速:我怎么能输出到多个目录中使用推测执行?(Hadoop Reducer: How

2019-08-16 22:11发布

我有一个需要结果输出到不同的目录,这样我们以后可以使用输出输入到蜂巢为分区表减速。 (蜂巢基于文件夹的名称创建分区)。 为了写出来,希望这些地点,我们目前没有使用任何Hadoop框架来实现这一点,我们只是写出不同的地点“的背后Hadoop的背”,可以这么说。 换句话说,我们没有使用Hadoop的API输出这些文件。

我们与问题mapred.reduce.tasks.speculative.execution设置为true 。 我理解这是因为对于相同的任务多任务尝试写入同一位置的情况。

有没有办法正确地使用Hadoop的API输出到几个不同的文件夹从同一减速,这样我也可以用mapred.reduce.tasks.speculative.execution=true ? (我知道MultipleOutputs,这我不知道支持推测执行。)

如果是这样,是有办法做到这一点,并输出到S3?

Answer 1:

Hadoop的通常与投机执行交易的方式是创建每个任务尝试一个输出文件夹(在实际HDFS输出目录的子目录_temporary)。

OutputCommitterOutputFormat则只是将临时任务文件夹的内容,在任务成功的实际输出文件夹,删除其他临时任务文件夹为那些失败/中止(这是大多数的默认行为FileOutputFormat S)

因此,对于你的情况,如果您的作业输出文件夹之外写入文件夹,那么你就需要扩展/实现自己的输出提交者。 创建文件时,我会遵循同样的校长 - 包括完整的任务ID(包括企图ID),以避免名称冲突推测执行时。 您如何跟踪你的工作创建的文件,并在中止管理缺失/失败的情况是你(也许有些文件globing的任务ID?)



Answer 2:

您可能会感兴趣的: http://hadoop.apache.org/docs/r2.3.0/api/org/apache/hadoop/mapreduce/lib/output/MultipleOutputs.html



文章来源: Hadoop Reducer: How can I output to multiple directories using speculative execution?