前面介绍了大数据领域里的两个主流引擎:MapReduce 和 Spark 。它们开创了历史,使得世界进入了大数据时代,让很多公司能够处理庞大的数据,并从中找到更多的有价值的东西。所以,Hadoop 刚开始兴起时,大家都兴奋于我终于能够处理这么多数据了,到后面,Hive 被 Facebook 一群人写出来的时候,大家又不用写那么复杂的 MapReduce 程序了,回到了熟悉的 SQL 的怀抱。
这时,一切看起来那么完美,又能处理大数据,而且还能用 SQL 处理大数据,嗯,似乎走到了终点。但是人的欲望是永远不会满足的。众所周知,MapReduce 程序是出了名的慢,我记得之前处理几个 GB 的数据,要几分钟,处理几个 MB 的数据也要几分钟,反正至少等个几分钟就是了。
于是大家很不满了,我就处理个几GB的数据,又不是几十GB、TB、PB,你还要给我等几分钟,十几分钟,烦死了。要是时间能缩短到几秒钟就好了。无论是在搞出 MapReduce 的谷歌的内部还是外部,总有人受够了 MapReduce 的慢。2006 年的时候,在Google的Kirkland的办公室,一群新人在远离总部的地方捣鼓出了 Dremel 。然后经过内部的竞争,2010 年谷歌发表了 Dremel 的论文,在论文中,Dremel 号称在中小数量级上,Dremel 能够提供比 MapReduce 更快的查询速度。然后,Dremel 成为了 Google 的 BigQuery 的后端计算引擎。
至此交互式查询的大门被打开了,翻开了新的历史篇章。
对于 Dremel 而言,它首先贡献了一套新的数据模型,这个数据模型类似于 JSON ,可以把嵌套数据变成类似二维表的数据,其次 Dremel 使用的数据存储格式采用了列式存储,常见的列式存储该有的东西都具备,比如向量化等等。这些东西组合在一起变成了开源项目 Apache Parquet 。这是在数据存储方面;
在计算方面,Dremel 使用了 MPP 架构,把数据处理的流程变成一个个的 Pipeline ,当然使用这个方式最大的好处就是可以充分使用内存,容错性也不错。搞出这些东西以后呢,Cloudera 就模仿着搞出了 Impala 、MapR 做出了 Apache Drill 。此处暂且不表,下一篇文章再聊。
聊聊我对 Dremel 的看法。