PowerDrill,Google又一个大数据分析大杀器
作者 郑柯 发布于 2012年8月29日
将近十年前,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设计用来分析少量的大数据集(指数据集的规模大,但数据集的数量不多)时提供更强劲的分析性能。
- 设计思路不同,包括:
- Dremel数据存于外存;PowerDrill数据存于内存。
- Dremel没做数据分区,分析时要扫瞄所有需要的列;PowerDrill做了组合范围分区,分析时可以跳过很多不需要的分区(真实应用统计可以跳过92.41%的分区)。
- Dremel用层次数据模型;PowerDrill用普通关系模型。
- 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又会催生什么项目呢?
郑柯 InfoQ中文站总编。做过开发,当过PM,干过销售,搞过市场,最终还是回到媒体。实用的理想主义者,相信:每天改变一点点,这个世界会更好。