开源大数据查询说明引擎近况
文|叶蓬 【按:此文是与我的《基于大数据说明的安详打点平台技能研究及应用》同期颁发在内刊上的我的同事们的作品,转载于此。这些基本性的研究和测试比拟说明,对付我们的BDSA技能蹊径选定大有辅佐。】 弁言 大数据查询说明是云计较中焦点题目之一,自从Google在2006年之前的几篇论文奠基云计较规模基本,尤其是GFS、Map-Reduce、 Bigtable被称为云计较底层技能三大基石。GFS、Map-Reduce技能直接支持了Apache Hadoop项目标降生。Bigtable和Amazon Dynamo直接催生了NoSQL这个极新的数据库规模,撼动了RDBMS在商用数据库和数据客栈方面几十年的统治性职位。FaceBook的Hive项 目是成立在Hadoop上的数据客栈基本构架,提供了一系列用于存储、查询和说明大局限数据的器材。当我们还浸淫在GFS、Map-Reduce、 Bigtable等Google技能中,并举办领略、把握、仿照时,Google在2009年之后,持续推出多项新技能,包罗:Dremel、 Pregel、Percolator、Spanner和F1。个中,Dremel促使了及时计较体系的鼓起,Pregel开发了图数据计较这个新方 向,Percolator使漫衍式增量索引更新成为文本检索规模的新尺度,Spanner和F1向我们揭示了跨数据中心数据库的也许。在Google的第 二波技能海潮中,基于Hive和Dremel,新兴的大数据公司Cloudera开源了大数据查询说明引擎Impala,Hortonworks开源了 Stinger,Fackbook开源了Presto。相同Pregel,UC Berkeley AMPLAB尝试室开拓了Spark图计较框架,并以Spark为焦点开源了大数据查询说明引擎Shark。因为某电信运营商项目中大数据查询引擎选型需 求,本文将会对Hive、Impala、Shark、Stinger和Presto这五类主流的开源大数据查询说明引擎举办扼要先容以及机能较量,最后进 行总结与瞻望。Hive、Impala、Shark、Stinger和Presto的进化图谱如图1所示。 ? 图1. Impala、Shark、Stinger和Presto的进化图谱 当前主流引擎简介 基于Map-Reduce模式的Hadoop善于数据批处理赏罚,不是出格切合即时查询的场景。及时查询一样平常行使MPP (Massively Parallel Processing)的架构,因此用户必要在Hadoop和MPP两种技能中选择。在Google的第二波技能海潮中,一些基于Hadoop架构的快速 SQL会见技能慢慢得到人们存眷。此刻有一种新的趋势是MPP和Hadoop相团结提供快速SQL会见框架。最近有四个很热点的开源器材出 来:Impala、Shark、Stinger和Presto。这也表现了大数据规模对付Hadoop生态体系中支持及时查询的祈望。总体来 说,Impala、Shark、Stinger和Presto四个体系都是类SQL及时大数据查询说明引擎,可是它们的技能偏重点完全差异。并且它们也不 是为了替代Hive而生,Hive在做数据客栈时长短常有代价的。这四个体系与Hive都是构建在Hadoop之上的数据查询器材,各有差异的偏重顺应 面,但从客户端行使来看它们与Hive有许多的配合之处,如数据表元数据、Thrift接口、ODBC/JDBC驱动、SQL语法、机动的文件名目、存储 资源池等。Hive与Impala、Shark、Stinger、Presto在Hadoop中的相关如图2所示。Hive合用于长时刻的批处理赏罚查询分 析,而Impala、Shark、Stinger和Presto合用于及时交互式SQL查询,它们给数据说明职员提供了快速尝试、验证设法的大数据说明工 具。可以先行使Hive举办数据转换处理赏罚,之后行使这四个体系中的一个在Hive处理赏罚后的功效数据集长举办快速的数据说明。下面,从题目域出发简朴先容 Hive、Impala、Shark、Stinger和Presto: 1) Hive,披着SQL外套的Map-Reduce。Hive是为利便用户行使Map-Reduce而在表面封装了一层SQL,因为Hive采 用了SQL,它的题目域比Map-Reduce更窄,由于许多题目,SQL表达不出来,好比一些数据发掘算法,保举算法、图像辨认算法等,这些仍只能通过 编写Map-Reduce完成。 2) Impala:Google Dremel的开源实现(Apache Drill相同),由于交互式及时计较需求,Cloudera推出了Impala体系,该体系合用于交互式及时处理赏罚场景,要求最后发生的数据量必然要少。 3) Shark/Spark:为了进步Map-Reduce的计较服从,Berkeley的AMPLab尝试室开拓了Spark,Spark可看 做基于内存的Map-Reduce实现,另外,伯克利还在Spark基本上封装了一层SQL,发生了一个新的相同Hive的体系Shark。 4) Stinger Initiative(Tez optimized Hive):Hortonworks开源了一个DAG计较框架Tez,Tez可以领略为Google Pregel的开源实现,该框架可以像Map-Reduce一样,可以用来计划DAG应用措施,但必要留意的是,Tez只能运行在YARN上。Tez的一 个重要应用是优化Hive和PIG这种典范的DAG应用场景,它通过镌汰数据读写IO,优化DAG流程使得Hive速率提供了许多倍。 5) Presto:FaceBook于2013年11月份开源了Presto,一个漫衍式SQL查询引擎,它被计划为用来专门举办高速、及时的数 据说明。它支持尺度的ANSI SQL,包罗伟大查询、聚合(aggregation)、毗连(join)和窗口函数(window functions)。Presto计划了一个简朴的数据存储的抽象层,来满意在差异数据存储体系(包罗HBase、HDFS、Scribe等)之上都可 以行使SQL举办查询。 ? 图2. Hive与Impala、Shark、Stinger、Presto在Hadoop中的相关 当前主流引擎架构 Hive Hive是基于Hadoop的一个数据客栈器材,可以将布局化的数据文件映射为一张数据库表,并提供完备的SQL查询成果,可以将SQL语句转换为 Map-Reduce使命举办运行,异常得当数据客栈的统计说明。其架构如图3所示,Hadoop和Map-Reduce是Hive架构的根本。Hive 架构包罗如下组件:CLI(Command Line Interface)、JDBC/ODBC、Thrift Server、Meta Store和Driver(Complier、Optimizer和Executor)。 ? 图3. Hive架构 Impala架构 Impala是Cloudera在受到Google的Dremel开导下开拓的及时交互SQL大数据查询器材,它可以当作是Google Dremel架构和MPP (Massively Parallel Processing)布局的团结体。Impala没有再行使迟钝的Hive&Map-Reduce批处理赏罚,而是通过行使与商用并行相关数据库中 相同的漫衍式查询引擎(由Query Planner、Query Coordinator和Query Exec Engine三部门构成),可以直接从HDFS或HBase顶用SELECT、JOIN和统计函数查询数据,从而大大低落了耽误,其架构如图4所 示,Impala首要由Impalad,State Store和CLI构成。Impalad与DataNode运行在统一节点上,由Impalad历程暗示,它吸取客户端的查询哀求(吸取查询哀求的 Impalad为Coordinator,Coordinator通过JNI挪用java前端表明SQL查询语句,天生查询打算树,再通过调治器把执行计 分别发给具有响应数据的其余Impalad举办执行),读写数据,并行执行查询,并把功效通过收集流式的传送回给Coordinator,由 Coordinator返回给客户端。同时Impalad也与State Store保持毗连,用于确定哪个Impalad是康健和可以接管新的事变。Impala State Store跟踪集群中的Impalad的康健状态及位置信息,由state-stored历程暗示,它通过建设多个线程来处理赏罚Impalad的注册订阅和 与各Impalad保持心跳毗连,各Impalad城市缓存一份State Store中的信息,当State Store离线后,由于Impalad有State Store的缓存如故可以事变,但会由于有些Impalad失效了,罢了缓存数据无法更新,导致把执行打算分派给了失效的Impalad,导致查询失败。 CLI提供应用户查询行使的呼吁行器材,同时Impala还提供了Hue,JDBC,ODBC,Thrift行使接口。 ? 图4. Impala架构 Shark架构 Shark是UC Berkeley AMPLAB开源的一款数据客栈产物,它完全兼容Hive的HQL语法,但与Hive差异的是,Hive的计较框架回收Map-Reduce,而 Shark回收Spark。以是,Hive是SQL on Map-Reduce,而Shark是Hive on Spark。其架构如图4所示,为了最洪流平的保持和Hive的兼容性,Shark复用了Hive的大部门组件,如下所示: 1) SQL Parser&Plan generation: Shark完全兼容Hive的HQL语法,并且Shark行使了Hive的API来实现query Parsing和 query Plan generation,仅仅最后的Physical Plan execution阶段用Spark取代Hadoop Map-Reduce; 2) metastore:Shark回收和Hive一样的meta信息,Hive里建设的表用Shark可无缝会见; 3) SerDe: Shark的序列化机制以及数据范例与Hive完全同等; 4) UDF: Shark可重用Hive里的全部UDF。通过设置Shark参数,Shark可以自动在内存中缓存特定的RDD(Resilient Distributed Dataset),实现数据重用,进而加速特定命据集的检索。同时,Shark通过UDF用户自界说函数实现特定的数据说明进修算法,使得SQL数据查询 和运算说明能团结在一路,最大化RDD的一再行使; 5) Driver:Shark在Hive的CliDriver基本长举办了一个封装,天生一个SharkCliDriver,这是shark呼吁的进口; 6) ThriftServer:Shark在Hive的ThriftServer(支持JDBC/ODBC)基本上,做了一个封装,天生了一个SharkServer,也提供JDBC/ODBC处事。 ? 图5. Shark架构 Spark是UC Berkeley AMP lab所开源的类Hadoop Map-Reduce的通用的并行计较框架,Spark基于Map-Reduce算法实现的漫衍式计较,拥有Hadoop Map-Reduce所具有的利益;但差异于Map-Reduce的是Job中间输出和功效可以生涯在内存中,从而不再必要读写HDFS,因此Spark 能更好地合用于数据发掘与呆板进修等必要迭代的Map-Reduce的算法。其架构如图6所示: ? 图6. Spark架构 与Hadoop的比拟,Spark的中间数据放到内存中,对付迭代运算服从更高,因此Spark合用于必要多次操纵特定命据集的应用场所。必要重复操纵的 次数越多,所需读取的数据量越大,受益越大,数据量小可是计较麋集度较大的场所,受益就相对较小。Spark比Hadoop更通用,Spark提供的数据 集操纵范例有许多种(map,filter,flatMap,sample,groupByKey,reduceByKey,union,join,cogroup,mapValues,sort,partionBy等),而Hadoop只提供了Map和Reduce两种操纵。Spark可以直接对HDFS举办数据的读写,同样支持 Spark on YARN。Spark可以与Map-Reduce运行于同集群中,共享存储资源与计较,数据客栈Shark实现上借用Hive,险些与Hive完全兼容。 Stinger架构 Stinger是Hortonworks开源的一个及时类SQL即时查询体系,声称可以晋升较Hive 100倍的速率。与Hive差异的是,Stinger回收Tez。以是,Hive是SQL on Map-Reduce,而Stinger是Hive on Tez。Tez的一个重要浸染是优化Hive和PIG这种典范的DAG应用场景,它通过镌汰数据读写IO,优化DAG流程使得Hive速率提供了许多倍。 其架构如图7所示, Stinger是在Hive的现有基本上加了一个优化层Tez(此框架是基于Yarn),全部的查询和统计都要颠末它的优化层来处理赏罚,以镌汰不须要的事变 以及资源开销。固然Stinger也对Hive举办了较多的优化与增强,Stinger总体机能照旧依靠其子体系Tez的示意。而Tez是 Hortonworks开源的一个DAG计较框架,Tez可以领略为Google Pregel的开源实现,该框架可以像Map-Reduce一样,用来计划DAG应用措施,但必要留意的是,Tez只能运行在YARN上。 ? 图7. Stinger架构 Presto架构 2013年11月Facebook开源了一个漫衍式SQL查询引擎Presto,它被计划为用来专门举办高速、及时的数据说明。它支持尺度的 ANSI SQL子集,包罗伟大查询、聚合、毗连和窗口函数。其简化的架构如图8所示,客户端将SQL查询发送到Presto的和谐器。和谐器会举办语法搜查、说明 和筹划查询打算。调治器将执行的管道组合在一路,将使命分派给那些里数据最近的节点,然后监控执行进程。客户端从输出段中将数据取出,这些数据是从更底层 的处理赏罚段中依次取出的。Presto的运行模子与Hive有着本质的区别。Hive将查询翻译成多阶段的Map-Reduce使命,一个接着一个地运行。 每一个使命从磁盘上读取输入数据而且将中间功效输出到磁盘上。然而Presto引擎没有行使Map-Reduce。它行使了一个定制的查询执行引擎和相应 操纵符来支持SQL的语法。除了改造的调治算法之外,全部的数据处理赏罚都是在内存中举办的。差异的处理赏罚端通过收集构成处理赏罚的流水线。这样会停止不须要的磁盘 读写和特另外耽误。这种流水线式的执行模子会在统一时刻运行多个数据处理赏罚段,一旦数据可用的时辰就会将数据从一个处理赏罚段传入到下一个处理赏罚段。 这样的方法会大大的镌汰各类查询的端到端相应时刻。同时,Presto计划了一个简朴的数据存储抽象层,来满意在差异数据存储体系之上都可以行使SQL进 行查询。存储毗连器今朝支持除Hive/HDFS外,还支持HBase、Scribe和定制开拓的体系。 ? 图8. Presto架构 机能评测总结 通过对Hive、Impala、Shark、Stinger和Presto的评测和说明,总结如下: 1) 列存储一样平常对查询机能晋升明明,尤其是大表是一个包括许多列的表。譬喻,从Stinger(Hive 0.11 with ORCFile)VS Hive,以及Impala的Parquet VS Text file; 2) 绕开MR计较模子,省去中间功效的耐久化和MR使命调治的耽误,会带来机能晋升。譬喻,Impala,Shark,Presto要好于Hive和Stinger,但这种上风跟着数据量增进和查询变伟大而削弱; 3) 行使MPP数据库技能对毗连查询有辅佐。譬喻,Impala在两表,多表毗连查询中上风明明; 4) 充实操作缓存的体系在内存富裕的环境下机能上风明明。譬喻,Shark,Impala在小数据量机遇能上风明明;内存不敷机遇能降落严峻,Shark会呈现许多题目; 5) 数据倾斜会严峻影响一些体系的机能。譬喻,Hive、Stinger、Shark对数据倾斜较量敏感,轻易造成倾斜;Impala受这方面的影响好像不大; 对付Hive、Impala、Shark、Stinger和Presto这五类开源的说明引擎,在大大都环境下,Imapla的综合机能是最不变的,时刻 机能也是最好的,并且其安装设置进程也相对轻易。其他别离为Presto、Shark、Stinger和Hive。在内存足够和非Join操纵环境 下,Shark的机能是最好的。 总结与瞻望 对大数据说明的项目来说,技能每每不是最要害的,要害在于谁的生态体系更强,技能上一时的领先并不敷以担保项目标最终乐成。对付Hive、 Impala、Shark、Stinger和Presto来讲,最后哪一款产物会成为究竟上的尺度还很难说,但我们独一可以确定并坚信的一点是,大数据分 析将跟着新技能的不绝推陈出新而不绝遍及开来,这对用户永久都是一件幸事。举个例子,假如读者留意过下一代Hadoop(YARN)的成长的话就会发明, 着实YARN已经支持Map-Reduce之外的计较范式(譬喻Shark,Impala等),因此未来Hadoop将也许作为一个兼容并包的大平台存 在,在其上提供各类百般的数据处理赏罚技能,有应对秒量级查询的,有应对大数据批处理赏罚的,各类成果一应俱全,满意用户各方面的需求。 除了Hive、Impala、Shark、Stinger和Presto这样的开源方案外,像Oracle,EMC等传统厂商也没在坐以待毙等着本身的市 场被开源软件侵占。像EMC就推出了HAWQ体系,并号称其机能比之Impala快上十几倍,而Amazon的Redshift也提供了比Impala更 好的机能。固然说开源软件由于其强盛的本钱上风而拥有极其强盛的力气,可是传统数据库厂商仍会实行推出机能、不变性、维护处事等指标上越发强盛的产物与之 举办差别化竞争,并同时参加开源社区、借力开源软件来富厚本身的产物线、晋升本身的竞争力,并通过更多的高附加值处事来满意某些斲丧者需求。事实,这些厂 商每每已在并行数据库等传统规模蕴蓄了大量的技能和履历,这些秘闻还长短常深挚的。总的来看,将来的大数据说明技能将会变得越来越成熟、越来越自制、越来 越易用;响应的,用户将会更轻易更利便地从本身的大数据中发掘出有代价的贸易信息。 ? http://www.36dsj.com/archives/30017 http://www.cnblogs.com/barrywxx/p/4257166.html (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |