首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TotalOrderPartitioner和分区文件

TotalOrderPartitioner和分区文件
EN

Stack Overflow用户
提问于 2016-02-08 08:52:16
回答 1查看 1.3K关注 0票数 2

我正在学习,我正在使用Java。我了解了用于在集群中按键对输出进行“全局”排序的TotalOrderPartitioner,并且它需要一个分区文件(使用InputSampler生成):

代码语言:javascript
复制
job.setPartitionerClass(TotalOrderPartitioner.class);
InputSampler.Sampler<Text, Text> sampler = new InputSampler.RandomSampler<Text, Text>(0.1, 200);
InputSampler.writePartitionFile(job, sampler);

我有几点疑虑,我寻求社会人士的帮助:

  1. “全球排序”这个词在这里到底是什么意思?输出究竟是如何排序的,我们仍然有多个分布在集群中的输出部件文件?
  2. 如果我们不提供分区文件,会发生什么?是否有处理这种情况的默认方法?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-08 10:37:35

让我们用一个例子来解释它。假设您的分区文件如下所示:

代码语言:javascript
复制
H
T
V

当您的键范围从A到Z时,这将弥补4个范围:

代码语言:javascript
复制
1 [A,H)
2 [H,T)
3 [T,V)
4 [V,Z]

当映射器现在向还原器发送记录时,分区器可以查看输出的键。假设所有映射器的输出如下:

代码语言:javascript
复制
A,N,C,K,Z,S,U

现在,分区程序检查分区文件,并将记录发送给相应的还原程序。让我们假设您已经定义了4个减速机,因此每个减速机将处理一个范围:

代码语言:javascript
复制
Reducer 1 handles A,C
Reducer 2 handles N,K,S
Reducer 3 handles U
Reducer 4 handles Z

这使您的分区文件与您使用的减缩器的数量相比,必须至少保存n-1元素。文档的另一个重要注意事项

如果键类型为BinaryComparable,而total.order.partitioner.natural.order不是false,则将生成第一个total.order.partitioner.max.trie.depth(2) +1字节的trie。否则,将使用为此作业定义的RawComparator对分区密钥集进行二进制搜索来定位键。输入文件必须使用相同的比较器进行排序,并包含JobContextImpl.getNumReduceTasks() -1键。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35265529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档