Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于文本的Hadoop组合器类_Java_Map_Hadoop_Reduce_Combiners - Fatal编程技术网

Java 用于文本的Hadoop组合器类

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 ..

对于何时使用Hadoop combiner类,我仍在尝试获得直觉(我看过一些文章,但它们对我的情况没有特别的帮助)

我的问题是,当组合器类的值为Text类时,使用组合器类是否合适?例如,假设映射器有以下输出:

fruit apple
fruit orange
fruit banana
...
veggie carrot
veggie celery
...
我们是否可以在此处应用组合器类:

fruit apple orange banana
...
veggie carrot celery
...

在数据到达缩减器之前?

合并器通常适用于对数据执行某种形式的聚合、最小值、最大值等操作的问题-可以在合并器中为映射输出计算这些值,然后在缩减器中为所有合并输出再次计算这些值。这很有用,因为这意味着您没有在映射器和减速器之间通过网络传输所有数据

现在并没有理由不能引入一个组合器来累积每个键的观察值列表(我假设这就是您的示例所显示的),但有一些事情会让它变得很棘手

如果您必须从映射器输出
对,并在reducer中使用
,那么您的组合器可以轻松地将值列表连接在一起,并将其作为文本值输出。现在在减速器中,您可以执行相同的操作,将所有值连接在一起,形成一个大输出

如果要对输出列表进行排序和重复数据消除,可能会遇到问题,因为合并器/缩减器逻辑需要将文本对象标记回单词,对列表进行排序和重复数据消除,然后重新生成单词列表

为了直接回答你的问题——什么时候合适,我可以举一些例子:

  • 如果要查找与每个键相关联的词典最小值或最大值
  • 每个键都有数百万个值,您希望“随机”采样一小组值

组合器通常适用于对数据执行某种形式的聚合、最小值、最大值等操作的问题-这些值可以在组合器中为映射输出计算,然后在减速器中为所有组合输出再次计算。这很有用,因为这意味着您没有在映射器和减速器之间通过网络传输所有数据

现在并没有理由不能引入一个组合器来累积每个键的观察值列表(我假设这就是您的示例所显示的),但有一些事情会让它变得很棘手

如果您必须从映射器输出
对,并在reducer中使用
,那么您的组合器可以轻松地将值列表连接在一起,并将其作为文本值输出。现在在减速器中,您可以执行相同的操作,将所有值连接在一起,形成一个大输出

如果要对输出列表进行排序和重复数据消除,可能会遇到问题,因为合并器/缩减器逻辑需要将文本对象标记回单词,对列表进行排序和重复数据消除,然后重新生成单词列表

为了直接回答你的问题——什么时候合适,我可以举一些例子:

  • 如果要查找与每个键相关联的词典最小值或最大值
  • 每个键都有数百万个值,您希望“随机”采样一小组值

当存在使用交换或关联方法的情况时,使用组合器类。交换示例:

abc=cba在联合收割机任务执行期间(a*b=d),c,然后将d,c的值发送给减速器。现在,减速器只需执行一项任务,而不是两项任务,即a*b=d d*c获得最终答案。若你们使用组合器,只需要做d*c

类似地,对于关联(a+b)+c=a+(b+c) 相联(分组)和交换(移动)结果在乘法或加法的方式上不会有所不同。组合器主要用于遵循关联和交换的结构化数据

组合器的优点:

  • 它减少了Map和reducer之间的网络I/O
  • 它减少了系统中的磁盘I/O 减速机作为执行的一部分发生在Comabiner中

当存在使用交换或关联方法的情况时,使用组合器类。交换示例:

abc=cba在联合收割机任务执行期间(a*b=d),c,然后将d,c的值发送给减速器。现在,减速器只需执行一项任务,而不是两项任务,即a*b=d d*c获得最终答案。若你们使用组合器,只需要做d*c

类似地,对于关联(a+b)+c=a+(b+c) 相联(分组)和交换(移动)结果在乘法或加法的方式上不会有所不同。组合器主要用于遵循关联和交换的结构化数据

组合器的优点:

  • 它减少了Map和reducer之间的网络I/O
  • 它减少了系统中的磁盘I/O 减速机作为执行的一部分发生在Comabiner中

Erm,如果您希望减速机以这种方式接收数据。。。那么是的。@BrianRoach减速机基本上在做合路器可能做的事情。你能详细说明你的答案吗?作为免责声明,我有一个作业,我的教授问我们为什么不能将combiner类引入类似于上述示例的情况。然而,我觉得它可以,这就是为什么我要问的。呃,如果这就是你希望你的减速机接收数据的方式。。。那么是的。@BrianRoach减速机基本上在做合路器可能做的事情。你能详细说明你的答案吗?作为免责声明,我有一个作业,我的教授问我们为什么不能将combiner类引入类似于上述示例的情况。不过,我觉得好像可以,这就是为什么我要问。谢谢,这是一个很好的解释。实际上,你达到了我的目标,因为合并器类会引入重复项