PowerDrill,Google又一个大数据分析大杀器

将近十年前,Google放出的两篇论文催生了Hadoop。最近,Google又有两篇论文放出,描述了他们用来处理大数据的利器。其中一篇提到的是Dremel。前不久,他们在正在举行的VLDB 2012大会上发布了一篇论文《Processing a Trillion Cells per Mouse Click》,其中提到了Google内部使用的一个工具——PowerDrill,只需要点一次鼠标,PowerDrill就可以处理上万亿条信息。论文中说:相比提供类似信息分析功能的传统数据库,该工具要快10倍到100倍。

Google从2008年开始使用PowerDrill,将其作为Dremel的变通方案。Google数据中心的头头之一Urs Hölzle在《连线》杂志的一篇文章中说:Dremel可以在3秒钟内查询一个P的数据。PowerDrill虽不能处理这么多数据,可能应对的量也不小了,而且它的处理速度更快。论文中的数据指出:PowerDrill可以在30到40秒内处理7820亿个单元的数据。Google说,这比Dremel的方式“高好几个数量级”。

网易杭州研究院副总监汪源发布了一篇博客,对PowerDrill和Dremel作出了分析和对比。他首先指出二者的相似之处:

PowerDrill与Dremel的类似之处在于都用了列存,都为SQL接口。

接下来,他分析了二者的不同:

  • 两者的设计目标不同,Dremel设计用来管理非常大量的大数据集(指数据集的数量和每数据集的规模都大),而PowerDrill设计用来分析少量的大数据集(指数据集的规模大,但数据集的数量不多)时提供更强劲的分析性能。
  • 设计思路不同,包括:
    1. Dremel数据存于外存;PowerDrill数据存于内存。
    2. Dremel没做数据分区,分析时要扫瞄所有需要的列;PowerDrill做了组合范围分区,分析时可以跳过很多不需要的分区(真实应用统计可以跳过92.41%的分区)。
    3. Dremel用层次数据模型;PowerDrill用普通关系模型。
    4. Dremel数据通常不需要load,增加数据很方便;PowerDrill数据要load,增加数据(估计)不太方便。

然后,他提到PowerDrill最鲜明的特点:

一个是已经提到的组合范围分区,另一个是空间效率非常高的内存数据结构。

首先,各列的数据使用基于字典的压缩技术,并且是双层字典。全局字典编码列中所有不同值,每个分区还有个小字典,映射分区内不同值的编码到全局编码,这样各分区内的值的编码取值范围比较小,从而可以用较少的比特来编码一个值。

在这个基本方法之上,还通过一下方式进一步优化空间效率:全局字典用trie结构;属性值Zippy压缩(热点数据不压缩,LRU替换);reorder纪录。这些优化通常能带来2-10+倍的空间效率提升。

对于使用内存做分析的做法,汪源认为:

PowerDrill设计用来分析少量的核心数据集,一般应用场景下数据量并不大,因此通过内存架构来提高分析效率我觉得是个相当合理的选择。

不过他对其组合范围分区的方式有自己的看法:

虽然论文中说领域专家通常很容易确定分区属性,但这个方式总是不通用,并且会导致load之后append数据不方便。如果用类似于InfoBright的Knowledge Grid的方式,可能分区过滤的效果会差一些,但可以规避上述两个问题。

Mike Olson是Cloudera的CEO,他曾说:“如果你想知道未来的大规模、高性能数据处理基础设施是什么样子,我的建议是去阅读Google目前刚刚放出的研究论文。”

MapReduce和BigTable的论文催生了大数据处理的事实标准Hadoop,这让我们不禁好奇:Dremel和PowerDrill又会催生什么项目呢?

你可能感兴趣的:(PowerDrill,Google又一个大数据分析大杀器)