EMC颜开分析Dremel原理,如何在3秒内分析1PB数据

上周,InfoQ中文站对Google的大数据分析工具PowerDrill做了简单介绍。今天,我们来看看服务于EMC的大数据专家颜开在博客文章中对Dremel的分析。

在这篇文章中,颜开首先提到了Dremel的5个主要特点:

  • Dremel是一个大规模系统。在一个PB级别的数据集上面,将任务缩短到秒级,无疑需要大量的并发。磁盘的顺序读速度在100MB/S上下,那么在1S内处理1TB数据,意味着至少需要有1万个磁盘的并发读! Google一向是用廉价机器办大事的好手。
  • Dremel是MR交互式查询能力不足的补充。和MapReduce一样,Dremel也需要和数据运行在一起,将计算移动到数据上面。所以它需要GFS这样的文件系统作为存储层。在设计之初,Dremel并非是MapReduce的替代品,它只是可以执行非常快的分析,在使用的时候,常常用它来处理MapReduce的结果集或者用来建立分析原型。
  • Dremel的数据模型是嵌套(nested)的。互联网数据常常是非关系型的。Dremel还需要有一个灵活的数据模型,这个数据模型至关重要。Dremel支持一个嵌套(nested)的数据模型,类似于JSON。
  • Dremel中的数据是用列式存储的。使用列式存储,分析的时候,可以只扫描需要的那部分数据的时候,减少CPU和磁盘的访问量。同时列式存储是压缩友好的,使用压缩,可以综合CPU和磁盘,发挥最大的效能。
  • Dremel结合了Web搜索和并行DBMS的技术。首先,他借鉴了Web搜索中的“查询树”的概念,将一个相对巨大复杂的查询分割成较小较简单的查询。大事化小,小事化了,能并发的在大量节点上跑。其次,和并行DBMS类似,Dremel可以提供了一个SQL-like的接口,就像Hive和Pig那样。

颜开提到了一个Dremel的应用场景。

美女数据分析师有一个新的想法要验证,需要在上亿条数据上面跑一个查询,看看结果和她的想法是不是一样,她可不希望等太长时间,最好几秒钟结果就出来。当然她的想法不一定完善,还需要不断调整语句。然后她验证了想法,发现了数据中的价值。最后,她可以将这个语句完善成一个长期运行的任务。

对于Google,数据一开始是放在GFS上的。可以通过MapReduce将数据导入到Dremel中去,在这些MapReduce中还可以做一些处理。然后分析师使用Dremel,轻松愉悦的分析数据,建立模型。最后可以编制成一个长期运行的MapReduce任务。

接下来,颜开详细分析了Dremel的列存储和嵌套数据模型,并得出结论:

就像其他数据分析系统一样,数据结构确定下来,功能就决定了一大半。对于Dremel的数据查询,必然是“全表扫描”,但由于其巧妙的列存储设计,良好的数据模型设计可以回避掉大部分Join需求和扫描最少的列。

对于Dremel的查询方式,颜开指出:

Dremel可以使用一种SQL-like的语法查询嵌套数据。由于Dremel的数据是只读的,并且会密集的发起多次类似的请求。所以可以保留上次请求的信息,还优化下次请求的explain过程。

……

Dremel是一个多用户的系统。切割分配任务的时候,还需要考虑用户优先级和负载均衡。对于大型系统,还需要考虑容错,如果一个叶子Server出现故障或变慢,不能让整个查询也受到明显影响。

……

Dremel还有一个配置,就是在执行查询的时候,可以指定扫描部分分区,比如可以扫描30%的分区,在使用的时候,相当于随机抽样,加快查询。

颜开还在博客中列出了对Dremel的测试结果,包括列存测试、和MapReduce的对比测试、树状计算Server测试、扩展性测试、容错测试等等。

对于Dremel和Hadoop的关系,颜开指出:

Dremel的公开论文里面已经说的很明白,Dremel不是用来替代MapReduce,而是和其更好的结合。Hadoop的Hive,Pig无法提供及时的查询,而Dremel的快速查询技术可以给Hadoop提供有力的补充。同时Dremel可以用来分析MapReduce的结果集,只需要将MapReduce的OutputFormat修改为Dremel的格式,就可以几乎不引入额外开销,将数据导入Dremel。使用Dremel来开发数据分析模型,MapReduce来执行数据分析模型。

Hadoop无论存储结构还是计算方式都没有Dremel精致。对Hadoop实时性的改进也一直是个热点话题。要想在Hadoop中山寨一个Dremel,并且相对现有解决方案有突破,笔者觉得Hadoop自身需要一些改进。一个是HDFS需要对并发细碎的数据读性能有大的改进,HDFS需要更加低的延迟。再者是Hadoop需要不仅仅支持MapReduce这一种计算框架。其他部分Hadoop都有对应的开源组件,万事俱备只欠东风。

颜开接下来提到几个与Dremel类似的开源实现:

  • OpenDremel/Dazo

可以在GoogleCode上找到http://code.google.com/p/dremel/。目前还没有发布。作者声称他已经完成了一个通用执行引擎和OpenStack Swift的集成。笔者感觉其越走越歪,离Dremel越来越远了。

  • Apache Drill

Drill 是Hadoop的赞助商之一MapR发起的。有和Dremel相似的架构和能力。他们希望Drill最终会像Hive、Pig一样成为Hadoop上的重要组成部分。Drill支持更标准的数据结构,还有更大的灵活性,支持多重查询语言,多种接口。

目前Drill包括四个组件:

  • 类似Google BigQuery的查询语言,支持嵌套模型,名为DrQL。
  • 低延迟分布式执行引擎,可以支持大规模扩展和容错。可以运行在上万台机器上计算数以PB的数据。
  • 嵌套数据模型,和Dremel类似。也支持CSV、JSON、YAML类似的模型。这样执行引擎就可以支持更多的数据类型。
  • 支持多种数据源,现阶段以Hadoop为数据源。

颜开在文中提到:伯克利分校的教授Armando Fox说过一句话——“如果你曾事先告诉我Dremel声称其将可做些什么,那么我不会相信你能开发出这种工具”。

读者如果希望了解更多Dremel的实现细节,请到颜开的博客上去看这篇文章。

你可能感兴趣的:(EMC颜开分析Dremel原理,如何在3秒内分析1PB数据)