2012-09-15 175 views
0

我有一个批量作业,用于检索大量相互独立的Web服务。从一个REST响应中检索的数据绝不依赖于其他数据,或者与其他数据一起使用,除非在处理完所有数据时计算一些轻量级统计信息。我应该使用Hadoop吗?

目前,我有分布在11个段的有效载荷集,每个段运行在单独的Java线程中。一旦最后一个线程完成,最终的统计数据就会被计算出来。根据每个REST请求是否具有相对于先前检索的新数据,整个批处理可能需要4到25分钟之间的任何时间。

批量大小相对适中,上述时间窗口并不差,因为数据每小时只更新一次,所以如果我每30分钟运行一次cron作业,实际上我就可以避免跳过时间序列。但是,我正在考虑批量增加。

我是Hadoop的新手,我想知道这个用例场景是否是MapReduce实现的一个很好的例子。一般来说,您如何决定何时使用多线程应用程序与加强Hadoop?

感谢

回答

1

我会告诉大家,网络爬行,分成要处理的站点列表确实是Hadoop的情况。在那里它并没有被用作实际的MapReduce,而是被用作可伸缩的分布式调度器。
您给出的数字(11段)听起来像是边界情况。如果你会说100答案是肯定会很明显
在同一时间,除了每个部分的数据处理你有一些有意义的结果聚合 - 这将是使用Hadoop MapReduce的另一个加号。

0

MapReduce用于特定任务:计算集合函数(如sum,max,count)。你的任务是否适合这个班级?然后,由于你的工作量不是那么大,请查看MapReduce的内存实现。 Hadoop将所有数据写入磁盘。

+0

每一个有效载荷项目都在MySQL中持久化,并与其他任何无关。每个节点最后都会将抓取的摘要传回给主站,并从那里进行计算。这可能发生在坚持存储的情况下,但当然,从内存来看它更好。 – amphibient