Apache Tajo:一个运行在YARN上支持SQL的分布式数据仓库

1. 背景

当前,Hadoop之上的SQL引擎已经很是多了,归纳起来有两类系统,分别是:html

(1)将SQL转化为MapReduce。典型表明是Apache Hive,这种系统的特色是扩展性和容错性好,但性能低下。为了弥补SQL on MapReduce的不足,google提出了Tenzing(见参考资料[3]),与Hive不一样,Tenzing充分借鉴了MapReduce和DataBase的优点,首先,它对传统的MapReduce进行了优化(好比Map 能够不写磁盘,Reduce可没必要排序等),使其性能更高,采用MapReduce一大优点是使Tenzing具备了很好的扩展性和容错性,Tenzing论文是这样表述的:git

“Thanks to MapReduce, Tenzing scales to thousands of cores and petabytes of data on cheap, unreliable hardware. We worked closely with the MapReduce team to implement and take advantage of MapReduce optimizations.”github

其次,它借鉴了传统database的优点,嵌有一个cost-based 优化器,以对SQL查询计划进行充分优化。数据库

(2)借鉴分布式数据库思想。典型表明是Google DremelApache DrillCloudera Impala,这类系统的特色是性能高(与Hive等系统比),但扩展性(包括集群规模扩展和SQL类型支持多样性)和容错性较差,Google在Dremel论文(见参考资料[4])中这样描述Dremel的适用场景:apache

“Dremel is not intended as a replacement for MR and is often used in conjunction with it to analyze outputs of MR pipelines or rapidly prototype larger computations.”segmentfault

也就是说,Dremel并非用以取代MR的,而是弥补MR不足,一般用于分析MR产生的数据(这些数据量小,处理这些数据时,对SQL表达能力和框架容错性要求低)。api

Apache tajo(具体见参考资料[1][2],tajo ppt下载tajo paper下载)是韩国大学数据库实验室开源的基于YARN的分布式数据仓库,目前是Apache的二级项目。Tajo的设计思想相似于Tenzing,它充分借鉴了MapReduce和DataBase的优点,使其具备Hive的扩展性和容错性好的优势,但同时性能比Hive高很多。架构

2. Tajo设计架构

Tajo采用了Master-worker架构,具体以下:app

(1) TajoMaster:为客户端提供查询服务和管理各个QueryMaster。框架

(2) QueryMaster:负责一个query的解析、优化与执行,它与多个task runner worker协同工做,完成一个query的计算。

以下图所示,Tajo采用传统数据库技术开发了SQL解析器,包括SQL解析,生成查询计划、优化查询计划、执行查询技术等,但与传统数据库不一样,Tajo最终执行查询计划时借鉴了MapReduce的设计思想,它将查询计划转化为一系列任务,这样,执行查询计划实际上就是执行这些任务,而每一个任务是一个计算单位,同Map Task和Reduce Task同样,它能够重复执行、有进度汇报等,这样,Tajo能够直接使用MapReduce中的容错、推测执行等机制。此外,Tajo使用YARN进行资源管理。

我在前一篇博文《Apache Tez:一个运行在YARN之上支持DAG做业的计算框架》中介绍了Tez,其中谈到Hive+Tez,经Tez优化后的Hive是一个很是有前景的项目,此外,Tajo也谈到,未来不排除使用Tez做为底层计算框架的可能:

Besides, Tez has some overlapping functions with Tajo. However, Tez is in the pre-alpha stage and may be a prototype. When Tez becomes feasible, Tajo could use Tez as an underlying framework according to the applicability. However, Tajo will still use its row/native columnar execution engine and its optimizer. Tajo may be potentially the first application of Tez.


3.总结

真正可能取代Hive的是Tenzing或者Tajo这样的系统,而不是相似Dremel或者Impala的系统。后者在扩展性、SQL表达能力(主要是它的嵌套存储模型致使的)和容错性等方面远远差于Hive/Tenzing/Tajo,正如Dremel论文所述,Dremel一般与MR结合使用,设计动机并非取代MR,而是使某些场景下的计算更加高效。此外,Dremel和Impala是一种计算系统,它们须要计算资源,却没有集成到当前发展迅猛的资源管理系统YARN中,这意味着,若是采用Impala这样的系统,你只能单独搭一个独立的专有集群,没法作到资源共享。即便Impala成熟了,若是Hive的取代品(好比Tajo)没有成熟,则长期时间内,大部分公司仍然主要采用Hive(这时候,Hortonworks的Hive+Tez就有用武之地了)进行大数据处理,而Impala仅用于进一步处理Hive输出的结果或者用于某一类适合场景的应用(毕竟这类系统的SQL表达能力有限,容错性和扩展性差)。

就Tajo而言,目前活跃度很低,只有韩国大学的数据库实验室的几我的在开发,离真正的可用还有很长时间,但它已经迈出了第一步,即成为Apache的项目,让更多的人参与进来。

4.参考资料

  1. Tajo’s slide
  2. Tajo: A Distributed Data Warehouse System on Large Clusters.
  3. Tenzing: A SQL Implementation On The MapReduce Framework
  4. Dremel: Interactive Analysis of Web-Scale Datasets

by 西成懂 under CC-BY

相关文章
相关标签/搜索