转载请注明做者与出处
做者:martin_li
网址:http://my.oschina.net/Senger/blog/180140
之前只用过Hive与impala两个类SQL查询系统,最近又将Hortonworks开源的Stinger与Apache的Drill作了些调研。累死累活搞了一天的资料,头都大了。为了记念我那逝去的脑细胞,特将这些信息整理出来。 git
因为调查时间比较短(一天的时间都头晕眼花了,再长点估计我就要过劳死了),所写之处不免会有差错,欢迎你们指正 github
整体来讲虽然impala、stinger、drill三个系统都是类SQL实时查询系统,可是它们的侧重点彻底不一样。并且它们也不是为了替换Hive而生,hive在作数据仓库时仍是颇有价值的。 apache
目前来讲只有impala比较成熟(人家标称要使用CDH版本hadoop,若是要使用apache的,要作好测试的内心准备)。 架构
其它两个系统还都处理孵化状态,可是前景很是不错。 app
这个系统是Cloudera开源的,时间大约是在12年下半年。虽然到如今才一年的时间可是已经有不少人在使用。社区也比较活跃,你们能够在github上面看到项目的开发人员与代码提交状况(地址:https://github.com/cloudera/impala)。我的感受开发者虽然有其它几个公司,可是仍是以cloudera为主。这样也造就了impala开发的比较快速,虽然到如今才一年左右的时间,可是impala已经能够很稳定的运行。 框架
impala主要是为hdfs与hbase数据提供实时SQL查询。它是根据google的dremel论文实现的一套分布式系统,自用户提交的SQL开始都是基于自身的分析器与执行器。下图是其架构图 分布式
(图片来源自impala安装使用说明书) oop
由 于彻底脱离了M/R技术,自身根据HDFS的文件分布来调整计算,因此速度较Hive有很大提高。根据我我的使用部分TPC基准测(为何是部分?没理 由,我只选了一部分SQL来跑),impala虽然性能提高不像Cloudera标称的达到hive的一百倍,可是在比较复杂的状况下达到40-70倍性 能提升仍是有的。 性能
就平常使用来讲,标称是支持大部分SQL-92标准(我也不清楚这个标准到底有多少,专业的童鞋给点解读呗!!)。根据我 是测试,平常用的SQL都没有问题。而且impala支持JDBC与ODBC的链接,这对于咱们的使用也是很必要的,基于此特色咱们能够开发对应业务系统 的UI部分,从而不用要求业务人员本身下SQL了(这是为数很少的展示工做成果的时候了)。 测试
其次就是impala支持的文件格式,咱们存取 数据的时候确定要应景的选择压缩与否以及文件的存储格式。impala支持经常使用的Text、Sequence、avro格式,压缩方面支持Snappy、 bzip、gzip以及deflate压缩应该能够知足咱们大部分的使用场景了。
而最棒的是它的UDF功能能够直接使用hive的udf库,而不须要修改任何代码,使用hive的童鞋能够庆祝了,不少任务不须要任何改变便可平滑切换impala。不过由于impala使用的是C开发的,因此impala仍是鼓励你们写一个c下面的udf来提升性能。
开源时间跟impala差很少,只不过属于Apache,。这个系统的目标很宏大--抽象全部数据源,作成统一接口。底层支持hbase、mongoDB、HDFS、Cassandra等数据源。
它的数据接口都是插件化,理论上支持各类查询语言,SQL天然也不例外,不过目前这个系统仍是Apache的一个孵化项目,不少功能还没有完成与稳定。可是能够预见,这个系统若是完成是颇有影响力的。下图为drill的架构图。
(图片来源https://cwiki.apache.org/confluence/display/DRILL/High-level+Architecture)
Hortonworks开源的一个实时类SQL查询系统,也是声称能够提高较hive 100倍的速度(悲崔的hive,都拿它来当反面教材)。目前处于其计划中三个阶段的最后一个阶段。
综合来看Hortonwork作的事是在hive等分析系统的现有基上加了一个优化层,全部的事都要通过它的优化层Tez(此框架是基于Yarn)来处理,以减小没必要要的工做以及资源开销。虽然它也对HIVE进行了不少的优化与增强,可是这个效果就要看子系统Tez的表现的了。Tez目前也是apache的孵化项目,Stringer若是要稳定能够商用依然还有不少路要走。
从下面的示意图你们能够了解Tez所处的位置。