2014-02-24 113 views
0

在具有10TB数据和30个节点的Hadoop集群中,我们是否需要分区器? 如果是,为什么?请支持一个示例场景,我们何时需要实施定制分区器?我们是否需要分区器?

+1

这不是数据大小的问题。这是你想要对数据做什么的问题。 – vefthym

+0

我已经理解,reducer的默认数量是1,这意味着除非指定,我们将获得单个输出文件。 如果我们想为特定的键分开文件,我们必须实现一个定制的分区程序(其中分区的数量==减速器的数量)。而且我还必须增加MR计划中的减少计数? 我知道了吗? – user3344735

+0

不是。在你的MR程序中,你定义了reducer的数量(比如'x')。然后,在你的分区器中使用这个数字,你决定在哪个'x' reducer中,一个特定的映射输出对。有关更多详细信息,请参阅@Jasper的答案。 – vefthym

回答

1

分区程序控制中间映射输出键的分区。 分区程序决定将哪些映射输出键发送给reducer。

默认为HashPartitioner

例如: 地图输出键/缬氨酸:[A,1],[A,3],[B,5],[B,1],[C,9]

在默认分区程序 - 假设有3级减速器:
减速器1会得到:[A,1],[A,3]
减速器2将获得:[B,5],[B,1]
Reducer C将得到:[C,9]

所以所有的数据在一个parti由单个减速器执行。如果减数的数量较少(比如上面的两个) - [C,9]也将进入减数1或2(分区模数行为处理此问题)。

自定义分区程序用于更改此默认行为。
例如:您可以决定将键/值发送给reducer如下:
Reducer 1 shud得到:[A,1],[B,5],[C,9]
Reducer 2 shud get: [B,1],[A,3]

有很多原因会导致你想要这样做。 例如:
- Reducer处理逻辑是基于对不是基于键的按键(哈希是相同的)进行分组 - 但是对您来说是自定义的,所以您想将这些按键组合在一起。
- 减速器创建自己的输出文件(每个文件一个)。所以,如果你想输出文件,使其包含有关某些键的数据。

+0

谢谢!这个解释确实有帮助。 – user3344735

+1

所以,是的,你总是需要一个分区器,但是你并不总是要写一个自定义分区器。 –

相关问题