Java 用于文本的Hadoop组合器类
对于何时使用Hadoop combiner类,我仍在尝试获得直觉(我看过一些文章,但它们对我的情况没有特别的帮助) 我的问题是,当组合器类的值为Text类时,使用组合器类是否合适?例如,假设映射器有以下输出:Java 用于文本的Hadoop组合器类,java,map,hadoop,reduce,combiners,Java,Map,Hadoop,Reduce,Combiners,对于何时使用Hadoop combiner类,我仍在尝试获得直觉(我看过一些文章,但它们对我的情况没有特别的帮助) 我的问题是,当组合器类的值为Text类时,使用组合器类是否合适?例如,假设映射器有以下输出: fruit apple fruit orange fruit banana ... veggie carrot veggie celery ... 我们是否可以在此处应用组合器类: fruit apple orange banana ... veggie carrot celery ..
fruit apple
fruit orange
fruit banana
...
veggie carrot
veggie celery
...
我们是否可以在此处应用组合器类:
fruit apple orange banana
...
veggie carrot celery
...
在数据到达缩减器之前?合并器通常适用于对数据执行某种形式的聚合、最小值、最大值等操作的问题-可以在合并器中为映射输出计算这些值,然后在缩减器中为所有合并输出再次计算这些值。这很有用,因为这意味着您没有在映射器和减速器之间通过网络传输所有数据 现在并没有理由不能引入一个组合器来累积每个键的观察值列表(我假设这就是您的示例所显示的),但有一些事情会让它变得很棘手 如果您必须从映射器输出
对,并在reducer中使用
,那么您的组合器可以轻松地将值列表连接在一起,并将其作为文本值输出。现在在减速器中,您可以执行相同的操作,将所有值连接在一起,形成一个大输出
如果要对输出列表进行排序和重复数据消除,可能会遇到问题,因为合并器/缩减器逻辑需要将文本对象标记回单词,对列表进行排序和重复数据消除,然后重新生成单词列表
为了直接回答你的问题——什么时候合适,我可以举一些例子:
- 如果要查找与每个键相关联的词典最小值或最大值
- 每个键都有数百万个值,您希望“随机”采样一小组值
对,并在reducer中使用
,那么您的组合器可以轻松地将值列表连接在一起,并将其作为文本值输出。现在在减速器中,您可以执行相同的操作,将所有值连接在一起,形成一个大输出
如果要对输出列表进行排序和重复数据消除,可能会遇到问题,因为合并器/缩减器逻辑需要将文本对象标记回单词,对列表进行排序和重复数据消除,然后重新生成单词列表
为了直接回答你的问题——什么时候合适,我可以举一些例子:
- 如果要查找与每个键相关联的词典最小值或最大值
- 每个键都有数百万个值,您希望“随机”采样一小组值
- 它减少了Map和reducer之间的网络I/O
- 它减少了系统中的磁盘I/O 减速机作为执行的一部分发生在Comabiner中
- 它减少了Map和reducer之间的网络I/O
- 它减少了系统中的磁盘I/O 减速机作为执行的一部分发生在Comabiner中