摘要:目前,在数据处理上,我们输入数据的速度往往比我们处理数据的速度快得多。在大数据的环境下,这个问题正变得更加明显。针对这个问题,GigaSpaces的CTO和创始人Nati Shalom日前在他的博客中介绍了如何让Hadoop的速度更快的相关技术。
目前,在数据处理上的一个挑战是,我们输入数据的速度往往比我们处理数据的速度快得多。在大数据的环境下,随着数据量的继续增长,以及相应的需要更多的复杂的数据处理,这个问题正变得更加明显。
帮助批处理
Hadoop的目的是通过以下几种方式应对这一挑战:
1. 使用一个分布式的文件系统:这使我们能够分散负载,并根据需要壮大我们的系统。
2. 优化写入速度:为了能够快速写入设计的Hadoop架构,需要在第一次登录时写入并处理。这可让写入速度相当快。
3. 使用批处理(Map/Reduce)来用处理速度平衡数据馈送的速度
批处理的挑战
批量处理所面临的挑战是它假定数据量突然增加。如果我们的数据在一个连续的基础上稳定到来,那么假设将导致整个批量处理背后的架构开始崩溃。
如果我们增加了批处理窗口,结果是在数据到来的这段时间里的更高的延迟,直到我们真正得到它并纳入我们的报告和见解里。此外,在许多系统中,每天进行的批处理窗口时间是有限的。通常情况下,假设大部分的处理可以在非高峰时段来进行,但是,体积变大,处理的数据所花费的时间变长,直到有一天它达到时间极限,然后我们面临处理一个不断增长的积压的问题。此外,如果我们的处理过程发生失败,我们可能没有足够的时间来重新处理。
通过基于流的处理来加快速度
基于流的处理概念是相当简单的。我们可以在数据进来的同时处理它,而不是先记录再处理。
用生产线这个很好的比喻来解释其中的差别。想想一家汽车制造线:一种方法是把所有的部件放在一起,然后一件一件地组装;另一种方法是让制造商包装各个部件,并只发送包装好的部件到制造线上。哪种方法更快?
Hadoop批处理系统和制造业的生产线是一样的道理。
在制造业中,即使我们在制造商那里预先包装零部件,我们仍然需要把所有的部件一起组装起来。同样的道理,基于流的处理并不意味着要取代我们的Hadoop系统,而是减少系统需要处理的大量工作,并让进入Hadoop的过程变得更容易,从而让数据处理更快。
内存中的流处理可以成为一个很好的流处理系统,正如Curt Monash所说,他的研究表明传统的数据库最终将在RAM中终结。在这个案例中,对于大数据的实时分析的背景下如何工作,我们演示了Twitter使用基于流的处理来面对到来的数据,然后送入一个大数据资料库。如下图所示:
谷歌更快处理的方法:使用基于流的处理,而不是Map/Reduce
由于缺乏替代品当时,许多大数据系统今天所使用的Map/Reduce,对于该领域来说,并不是一个最好的选择。一个很好的例子是使用Map/Reduce来维护一个全球性的搜索索引。使用Map/Reduce,我们基本上会重建索引,在那里实际上会有更合理的更新。
谷歌把索引处理的很大一部分从Map/Reduce降低到一个更加实时的处理模式上,正如最近的文章中指出:
谷歌是如何设法让其搜索结果越来越实时?通过一个被称为Percolator的增量处理引擎来取代GMR支持。通过只涉及新建、修改或删除文件和使用二级指标来有效地分类和查询所得到的输出,谷歌能够显著降低需要的时间。正如文章中所写的:“[C]onverting索引系统让一个增量系统处理文件的延迟平均下降了100倍。“这意味着Web上的新内容被索引的速度可以比使用 MapReduce系统快100倍!
最后的注意事项
我们可以在一些工作进入我们的Hadoop系统之前就进行预处理,这样使我们的Hadoop系统运行得更快。我们也可以不在Hadoop Map/Reduce系统中批处理不适合的工作负载,而是像谷歌一样,使用Stream Processing。