有个我认识的老工程师,曾经作为Dremel team的人,曾经有段时间的工作就是写从其他的系统的查询语言转化到Dremel,以便它们的application们可以顺利过渡过来。 Dremel刚出来的时候还是非常小心翼翼的避免和MapReduce冲突的。 说到Dremel当然要提一个在华盛顿大学读了本科的中国人 JingJing Long。他是Dremel的早期员工之一,后来成了那个team的manager,再后来又自立门户了。 当然最近我听说Dremel team自己也为自己当初做的那个决定而在哭。 Dremel这个nested model真的是一个大傻逼的决定。
对我来说,Dremel作为一个Google的内部系统,我其实没有任何办法去玩这个系统。所以我对于Dremel这个系统的了解只能从对方发表的资料里面去判断。 那么我们回到Dremel上来。我对Dremel这个系统的学习,作为一个非Google的人,主要是基于了对这篇的阅读和理解。 Dremel的本质是一个数据仓库,上面跑的是OLAP的查询。 Dremel的存储是需要做一次ETL这样的工作,把其他的数据通过转化成为它自己的column store的格式之后才能高效率的查询的。 关于我对Dremel的结论以及我是如何做出这些结论的,我就写到这里吧,希望能给大家,尤其是那些留言给我,希望我能更详细解释的朋友一个参考。
而最吸引人的一篇论文要属被称之为 Dremel 的工具。 Dremel 是一种分析信息的方式,Dremel 可跨越数千台服务器运行,允许“查询”大量的数据,如 Web 文档集合或数字图书馆,甚至是数以百万计的垃圾信息的数据描述。 但目前 Dremel 做到了鱼和熊掌兼得。 Dremel 做到了 “不可能完成的任务”,Dremel 设法将海量的数据分析于对数据的深入挖掘进行有机的结合。 Dremel 所处理的数据规模的速度实在令人印象深刻,你可以轻松的探索数据。在 Dremel 出现之前还没有类似的系统可以做的像 Dremel 这样出色。 换句话说即使你不是 Google 的工程师你同样可以使用 Dremel。Google 现在提供的 BigQuery 的服务就是基于 Dremel。用户可通过在线 API 来使用这个平台。
2006 年的时候,在Google的Kirkland的办公室,一群新人在远离总部的地方捣鼓出了 Dremel 。 然后经过内部的竞争,2010 年谷歌发表了 Dremel 的论文,在论文中,Dremel 号称在中小数量级上,Dremel 能够提供比 MapReduce 更快的查询速度。 然后,Dremel 成为了 Google 的 BigQuery 的后端计算引擎。 至此交互式查询的大门被打开了,翻开了新的历史篇章。 对于 Dremel 而言,它首先贡献了一套新的数据模型,这个数据模型类似于 JSON ,可以把嵌套数据变成类似二维表的数据,其次 Dremel 使用的数据存储格式采用了列式存储,常见的列式存储该有的东西都具备 聊聊我对 Dremel 的看法。
七、海量数据的交互式分析工具Dremel (一)产生背景 Google 的团队结合其自身的实际需求,借鉴搜索引擎和并行数据库的一些技术,开发出了实时的交互式查询系统 Dremel。 面向记录和面向列的存储: Google 的 Dremel 是第一个在嵌套数据模型基础上实现列存储的系统。 Dremel 中的数据都是分布式存储的,因此每一层查询涉及的数据实际都被水平划分后存储在多个服务器上。Dremel 是一个多用户系统,因此同一时刻往往会有多个用户进行查询。 希望未来能出现一个真正有影响力的开源系统实现 Dremel 的主要功能并被广泛采用。 性能分析与对比: PowerDrill与Dremel的对比: PowerDrill Dremel 设计目标 处理非常大量的数据集 分析少量的核心数据集 设计理念 处理的数据来自外存 处理的数据尽可能地存于内存
现在,进入到Google BigQuery和Dremel的场景。BigQuery在很多方面都是一个严谨的的游戏规则改变者。 BigQuery将为您提供海量的数据存储以容纳您的数据集并提供强大的SQL,如Dremel语言,用于构建分析和报告。 正如Dremel指出的那样,允许连接(存在),但要求连接中至少有一个表是“小”的。小的意思是指少于8MB的压缩数据。 这实际上是Dremel和BigQuery擅长的,因为它为您提供了SQL功能,例如子选择(功能),这些功能在NoSQL类型的存储引擎中通常找不到。 但是,对于Dremel来说,考虑到Dremel查询扩展的方式以及它们不依赖索引的事实,这不算是问题。
自从Dremel出来以后,跟风的行动就开始了。狗狗出品,必有跟屁虫,必有抄袭者,更有炒作的。Cloudera最开始宣传的时候,在2012年,它们做的一个新系统叫Impala,是Dremel的开源版。 这个事情后来的发展,当然是Hortonworks继续搞它的HIVE,MapR现在天天叫着Drill是Dremel的开源实现。 而Cloudera很早之前就悄悄的改变了宣传,不再说自己是Dremel的开源实现了。 至于为什么Cloudera 突然不提自己是Dremel的开源实现了。 我想主要是第一,那个Parquet,Cloudera搞的column store format成为了独立的项目,第二,这群写IMPALA的人里面有做传统DB出身的人,看不起Dremel的那套。
在interactive的旗帜下的不仅仅有Google的Dremel或者是打着Dremel的开源项目的Drill,以及曾经打着Dremel的开源项目现在说自己是MPP的没有毕业的Impala。 Cloudera就老老实实的捧自己的Impala,Hortonworks跳进HIVE的坑和Cloudera PK,至于其他的很多公司要么去做Drill了要么有Dremel要么有传统数据库改吧改吧出来的产品
作为要做Dremel的opensource版,来应对更快更高更强的要求的MapR又一次发扬了懒土省的美德,取了个名字叫Drill。 这个项目很快成了Apache的孵化器项目,然后就到顶级了。 Drill是不是Dremel呢?当然不是的。从我能看到的关于Drill来介绍以外。Drill有那么几个重要的特点。首先是Drill对nested data的支持。 作为自称的Dremel的替代品,现在流行什么说什么,比如说cost-base的optimization这个基本上从HIVE到IMPALA到Drill都在吹,到底有多好,我想很多做的其实非常的差。
Apache Parquet 源自于google Dremel系统,Parquet相当于Google Dremel中的数据存储引擎,而Apache顶级开源项目Drill正是Dremel的开源实现。
这是一个仿照Google Dremel的OLAP产品。2014年Citus Data给PostgreSQL做了一个Column Store。 整体来说,Citus Data最初的时候是仿照Google Dremel做OLAP产品。根据我查到的资料,其产品并非从头开始构建,而是和大部分创业公司的人一样,选择用PostgreSQL,在其上开发。
2.Parquet Google同样在 2010年发布了最新交互处理的数据系统Dremel,并且在Dremel之上构建了一个与Protocol Buffer兼容的数据模型。 于是同样在2013年,Cloudera与Twitter针对Dremel的数据模型为模板,推出了Parquet,Parquet同样在2015年顺利“毕业”,成为Apache的顶级项目。 (这里涉及到列存储的跳转,详细的内容可以参考Dremel论文的原文) 上述Parquet的核心就在于:通过嵌套的数据模型设计来规避Join操作和扫描最少的列存储。
Apache-Impala-Training-by-Pincorps-impala-courses.jpg Impala背景 Impala的出现,追溯其源头,是来自于Google的“新三篇论文”(Caffeine–网络搜索引擎、Pregel–分布式图计算、Dremel –交互式分析工具)之一的交互式分析工具Dremel。
Drill Google的Dremel的开源版本。PB以上数据实时秒级查询。 Flume 用来做数据迁移的工具。 Impala(Cloudera) 另一个Google的Dremel的开源版本, 界面跟Hive类似(事实上就是使用的Hive-SQL的子集), 只是不是翻译成MapReduce而是直接查询。
领导着Apache Drill项目,是Google的Dremel的开源实现,目的是在Hadoop数据上执行类似SQL的查询以提供实时处理。 说大数据的技术还是要先提Google,Google 新三辆马车,Spanner, F1, Dremel Spanner:高可扩展、多版本、全球分布式外加同步复制特性的谷歌内部数据库,支持外部一致性的分布式事务 Dremel: 一种用来分析信息的方法,它可以在数以千计的服务器上运行,类似使用SQL语言,能以极快的速度处理网络规模的海量数据(PB数量级),只需几秒钟时间就能完成。 Spark ? 有些是基于Google Dremel设计。 Drill Apache社区类似于Dremel的开源版本—Drill。一个专为互动分析大型数据集的分布式系统。 Druid 在大数据集之上做实时统计分析而设计的开源数据存储。
领导着Apache Drill项目,是Google的Dremel的开源实现,目的是执行类似SQL的查询以提供实时处理。 原理篇 数据存储 我们的目标是做一个可靠的,支持大规模扩展和容易维护的系统。 技术篇 说大数据的技术还是要先提Google,Google 新三辆马车,Spanner, F1, Dremel Spanner:高可扩展、多版本、全球分布式外加同步复制特性的谷歌内部数据库,支持外部一致性的分布式事务 Dremel: 一种用来分析信息的方法,它可以在数以千计的服务器上运行,类似使用SQL语言,能以极快的速度处理网络规模的海量数据(PB数量级),只需几秒钟时间就能完成。 Spark ? 有些是基于Google Dremel设计。 Drill Apache社区类似于Dremel的开源版本—Drill。一个专为互动分析大型数据集的分布式系统。 Druid 在大数据集之上做实时统计分析而设计的开源数据存储。
接着上篇文章继续聊聊交互式查询,交互式查询崛起的原因是人类的懒惰本质,自从谷歌发表了 Dremel 论文后,相似的计算引擎不断地出现,在这篇文章里,针对几种典型的计算引擎简单聊聊。 第一波出现的 Dremel 的开源实现是 Cloudera 的 Apache Impala 和 MapR 的 Apache Drill 。
领导着Apache Drill项目,是Google的Dremel的开源实现,目的是执行类似SQL的查询以提供实时处理。 原理篇 数据存储 我们的目标是做一个可靠的,支持大规模扩展和容易维护的系统。 说大数据的技术还是要先提Google,Google 新三辆马车,Spanner, F1, Dremel Spanner:高可扩展、多版本、全球分布式外加同步复制特性的谷歌内部数据库,支持外部一致性的分布式事务 Dremel: 一种用来分析信息的方法,它可以在数以千计的服务器上运行,类似使用SQL语言,能以极快的速度处理网络规模的海量数据(PB数量级),只需几秒钟时间就能完成。 Spark ? 有些是基于Google Dremel设计。 Drill Apache社区类似于Dremel的开源版本—Drill。一个专为互动分析大型数据集的分布式系统。 Druid 在大数据集之上做实时统计分析而设计的开源数据存储。
Sybase IQ、 Exasol、 Infobright、 InfiniDB、 MonetDB (VectorWise, Actian Vector)、 LucidDB、 SAP HANA、 Google Dremel
Dremel是谷歌内部的一个数据仓库系统。谷歌对外商用化了Dremel,取名叫BigQuery。Dremel采用了半结构化的数据模型,存储格式是列式存储,其第一代格式是ColumnIO。 Dremel在谷歌内部异常的成功。迄今为止,BigQuery依然是谷歌云上最为成功的大数据产品。 Flume是谷歌内部MapReduce框架的升级产品。 它的低延时的OLAP查询主要和Dremel竞争。而它支持复杂ETL的目标主要是瞄准了Flume。 F1有三种执行模式:单线程,分布式交互式执行,基于MapReduce的非交互式执行。