在mapreduce的map worker上如何使用中间值对文件进行分区?

ijxebb2r  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(308)

我试图理解mapreduce模型,我需要一些建议,因为我不确定如何使用map函数的中间结果对文件进行排序和分区。我对mapreduce了解最多的是jeffrey dean&sanjay ghemawat的mapreduce论文和hadoop:权威指南。
具有Map函数中间结果的文件是小的排序和分区文件的组合。这些小文件被划分为相应的分区以减少工作人员。然后将小文件合并为一个文件。我需要知道小文件的分区是如何完成的。首先,我认为每个分区都有一定范围的键。
例如:如果我们的键是范围<1的整数;100>并且文件被划分为三个分区,那么第一个分区可以由键在<1,33>范围内的值组成,第二个分区的键在<34范围内;66>和第三分区<67;100>. 合并文件中也有相同的分区。
但我不确定。每个分区都被发送到相应的reduce worker。在我们的例子中,如果我们有两个reduce worker,那么用前两个键范围(<1,33>和<34;66>)可以发送到第一个工作进程,最后一个分区可以发送到第三个工作进程。但是,如果我错了,并且文件是以另一种方式划分的(我的意思是分区没有自己的可能键范围),那么每个reduce工作者都可以得到相同键的结果。所以我需要以某种方式合并这些reduce workers的结果,对吗?我可以将这些结果发送到主节点并在那里合并它们吗?
简而言之:我需要解释Map阶段的文件是如何划分的(如果我的描述是错误的),并解释如何以及在哪里处理reduce workers的结果。
我希望我描述了我的问题足够理解。当然,我可以解释得更多。
非常感谢你的回答。

e1xvtsh3

e1xvtsh31#

有一个partitioner类可以这样做。中间文件中的每一个键/值对都会连同缩减器(分区)的总数一起传递给分区器,分区器返回应该处理该特定键/值对的分区号。
有一个默认的分区器,它可以很好地完成分区工作,但是如果您想要更好的控制,或者如果您有一个特殊格式(例如复杂)的键,那么您可以并且应该编写自己的分区器。

相关问题