分区器或多路输出

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

我想听听你对分区和倍增的看法。
假设我有一个包含密钥的文件

0:aaa  
1:bbb  
0:ccc  
0:ddd  
...  
1:zzz

我想有2个文件:一个文件包含密钥开始 0: 另一个包含以 1: . 我应该使用哪种方法:
1) 使用自定义分区器,它将解析键并为getpartition()返回0或1。
2) 在reduce阶段使用multipleoutputs.write,方法是解析键并提供 zero 或者 one 对于 namedOutput multipleoutputs.write的参数。
哪一个更好?对我来说,1)更好,因为缩减器处理单个文件。

bweufnob

bweufnob1#

当你说第一个选项更好时,这意味着你受两个值的约束。。假设您得到了其他键值,您可能需要将partitioner或cofiguration更改为设置3个reducer,所以更好的方法是使用multipleoutput

5fjcxozz

5fjcxozz2#

如果您的工作只是将输入文件拆分为两部分,那么多输出是一个更好的选择,因为您可以在shuffle/sort阶段节省时间(通过运行仅Map的工作)。
现在,如果您有很多输入文件,并且不希望输出文件的数量是您有输入文件数量的2倍,那么使用基于分区的方法将允许您将输入文件合并为2个输出(它们不会很好地命名,但是,multipleoutputs的另一个好处是,但是您可以通过在reducer和laxyoutputformat中使用multipleoutputs来轻松地解决这个问题,以确保空的part-r文件不会作为输出写入)。
所以要回答-这取决于你有多少输入文件,以及你想要多少输出文件。

相关问题