如何使用Hadoop折叠TB级单词



Hadoop会帮助解决以下问题吗?

我需要根据一些规则将 1000GB 的单词折叠成一个单词。例如:

 fold("dog","cat") = "pet"

单词按什么顺序折叠并不重要。我想将所有数据分成几个块,并首先在每个块中折叠单词。之后折叠结果的话。

问题:

1)使用Hadoop来完成这项任务有意义吗?

2)要创建多少块,Hadoop应该多大的块才能高效工作?

谢谢!

我想

我现在明白你的问题了。 为了简单起见,考虑一个示例,我们将简单地添加 1000GB 的整数(正如您所说,加法大致相当于您的 fold() 操作)。

因此,Map/Reduce有两个阶段 - Map阶段对单个数据项(键,值对)进行操作,然后馈送到可以发生聚合的Reduce阶段。 由于您的整个操作是一个巨大的聚合,因此您可以使用Hadoop的标识映射器以及组合器将聚合分解为几个较小的聚合。

合路器基本上是一个化简器,它紧跟在作业的映射器之后运行。 它的想法是对退出 Map 节点的数据进行聚合,以组合它所能组合的任何内容,并减少通过网络发送到 Reduce 节点的数据量。

下面是加法组合器的示例

  public class AddCombiner extends Reducer<SomeKey, IntWritable, SomeKey, IntWritable> {
     public void reduce(SomeKey key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException 
     {
       int total = 0;
       for (IntWritable value : values) 
       {
           total += value.get();
       }
       context.write(key, new IntWritable(total));
     }
   }

因此,您可以在 1000GB 的输入上运行 Map/Reduce 作业,让组合器在映射任务之后执行第一级聚合,然后有一个 Reducer 从组合器中获取聚合数据,并将一个最终聚合到您的最终答案中。

相关内容

  • 没有找到相关文章

最新更新