在具有10TB数据和30个节点的Hadoop集群中,我们是否需要分区器? 如果是,为什么?请支持一个示例场景,我们何时需要实施定制分区器?我们是否需要分区器?
回答
分区程序控制中间映射输出键的分区。 分区程序决定将哪些映射输出键发送给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处理逻辑是基于对不是基于键的按键(哈希是相同的)进行分组 - 但是对您来说是自定义的,所以您想将这些按键组合在一起。
- 减速器创建自己的输出文件(每个文件一个)。所以,如果你想输出文件,使其包含有关某些键的数据。
谢谢!这个解释确实有帮助。 – user3344735
所以,是的,你总是需要一个分区器,但是你并不总是要写一个自定义分区器。 –
- 1. 我们是否需要在IE8中对此进行区分?
- 2. 我们是否需要ezpublish_legacy?
- 3. 我们是否需要s3 bucket与EC2相同的区域
- 4. 我们是否需要解决ConcurrentModificationException?
- 5. 我们是否需要更新Orbeon?
- 6. 我们是否需要取消按钮?
- 7. 我们是否需要更改标题?
- 8. 我们是否需要关闭file_get_contents?
- 9. 我们是否需要在UIScrollView iOS 6+
- 10. 如果我们需要支持多个平台,我们是否需要restclient
- 11. 我们是否需要为链表节点分配内存?
- 12. 当我们使用xchg时,我们是否需要防护
- 13. 我是否需要区分动态创建的复选框?
- 14. 我们是否需要为移动浏览器“CSS重置”?
- 15. 我们是否还需要迭代器设计模式?
- 16. 我们是否需要每个子网的接口路由器?
- 17. 我们是否需要在新的注释器中创建process()?
- 18. 我们是否需要在ArrayList上使用迭代器?
- 19. 我们是否需要一个Apache服务器来承载php
- 20. 为jquery,是否有必要我们的文件需要托管在服务器?
- 21. 我们是否需要Microsoft.Web.MVC,我使用ASP.NET MVC 2.0?
- 22. 我是否需要自定义分配器来共享指针?
- 23. 我是否需要为部分视图添加容器? (Bootstrap 3)
- 24. 我们是否总是需要使用async关键字?
- 25. 我们是否总是需要使用CacheManager?
- 26. 我们是否需要复制服务器上的负载平衡器?
- 27. 我们是否总是要关闭流?
- 28. 我们是否总是需要检查malloc/realloc之后指针是否为空?
- 29. 当我们创建表时,我们是否需要指定关系的基数?
- 30. 当我们获取C#中的属性时,我们是否需要锁定?#
这不是数据大小的问题。这是你想要对数据做什么的问题。 – vefthym
我已经理解,reducer的默认数量是1,这意味着除非指定,我们将获得单个输出文件。 如果我们想为特定的键分开文件,我们必须实现一个定制的分区程序(其中分区的数量==减速器的数量)。而且我还必须增加MR计划中的减少计数? 我知道了吗? – user3344735
不是。在你的MR程序中,你定义了reducer的数量(比如'x')。然后,在你的分区器中使用这个数字,你决定在哪个'x' reducer中,一个特定的映射输出对。有关更多详细信息,请参阅@Jasper的答案。 – vefthym