hadoop reducer:如何使用推测执行输出到多个目录?

oiopk7p5  于 2021-06-04  发布在  Hadoop
关注(0)|答案(2)|浏览(535)

我有一个reducer,它需要将结果输出到不同的目录,以便我们以后可以将输出用作hive的输入,作为分区表(配置单元根据文件夹名称创建分区)。为了写出这些位置,我们目前没有使用任何hadoop框架来完成这项工作,可以说,我们只是在hadoop背后的不同位置写出。换句话说,我们没有使用hadoop的api来输出这些文件。
我们有问题 mapred.reduce.tasks.speculative.execution 设置为 true . 我理解这种情况是因为对同一个任务的多个任务尝试正在写入同一个位置。
有没有一种方法可以正确地使用hadoop的api从同一个reducer输出到多个不同的文件夹,这样我也可以使用 mapred.reduce.tasks.speculative.execution=true ? (我知道multipleoutput,我不确定它是否支持推测性执行。)
如果是这样的话,有没有办法做到这一点并输出到s3?

0x6upsns

0x6upsns1#

hadoop通常处理推测性执行的方法是为每个任务尝试创建一个输出文件夹(在实际hdfs输出目录的临时子文件夹中)。
这个 OutputCommitter 对于 OutputFormat 然后,只要在任务成功时将temp task文件夹的内容移动到实际的输出文件夹,并删除失败/中止的其他temp task文件夹(这是大多数情况下的默认行为) FileOutputFormat 秒)
因此,对于您的情况,如果您要写入作业输出文件夹之外的文件夹,则需要扩展/实现您自己的输出提交程序。在创建文件时,我将遵循相同的原则—包括完整的任务id(包括尝试id),以避免在推测性执行时发生名称冲突。如何跟踪在作业中创建的文件,以及如何管理中止/失败场景中的删除取决于您(可能是针对任务id的一些文件全局化?)

h79rfbju

h79rfbju2#

您可能对此感兴趣:http://hadoop.apache.org/docs/r2.3.0/api/org/apache/hadoop/mapreduce/lib/output/multipleoutputs.html

相关问题