Tajo 是一个分布式数据仓库系统,基于 Hadoop 实现,特点是低延迟、高可伸缩,提供专用查询和 ETL 工具.
特点 ​
​交互式和批处理查询 ​ ​存储在HDFS中大型数据集和其他数据源的完全分布式的SQL查询处理 ​ ​非常低的响应时间(100毫秒?),在合理数据范围内的简单查询 ​长时间运行的查询支持 ​ ​容错支持,避免某些任务失败后的查询重启 ​ ​动态调度,处理和异构集群节点故障、 ​ETL ​ ​ ETL 可实现不同数据格式之间的转换 ​ ​支持多种文件格式,如 CSV、RCFile 和 RowFile ​扩展性 ​ ​ 支持用户自定义函数 ​ ​提供自定义文件格式的 Scanner/Appender 接口 ​兼容性 ​ ​遵循 ANSI/ISO SQL 标准,非标准方面遵循 PostgreSQL 规范 ​ ​支持 HiveQL 模式 ​ ​在 HCatalog 和 Hive MetaStore 实现表访问 ​ ​支持 JDBC 驱动 ​简单 ​ ​提供交互式 Shell 来提交 SQL 查询到 Tajo 集群 ​ ​提供备份和恢复工具 ​ ​异步/同步 Java API 来提交 SQL 查询到 Tajo 集群
​Hadoop之上的SQL引擎已经非常多,大致分两种
Google在Dremel论文(http://research.google.com/pubs/pub36632.html)中这样描述Dremel的适用场景:
“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.” 其次,它借鉴了传统database的优势,嵌有一个cost-based 优化器,以对SQL查询计划进行充分优化。
(2)借鉴分布式数据库思想。典型代表是Google Dremel、Apache Drill和Cloudera Impala,这类系统的特点是性能高(与Hive等系统比),但扩展性(包括集群规模扩展和SQL类型支持多样性)和容错性较差,Google在Dremel论文(http://research.google.com/pubs/pub36632.html)中这样描述Dremel的适用场景:
“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.” 也就是说,Dremel并不是用以取代MR的,而是弥补MR不足,通常用于分析MR产生的数据(这些数据量小,处理这些数据时,对SQL表达能力和框架容错性要求低)。
Tajo的设计思想类似于Tenzing,它充分借鉴了MapReduce和DataBase的优势,使其具有Hive的扩展性和容错性好的优点,但同时性能比Hive高不少。
Tajo采用了Master-worker架构,具体如下:
(1) TajoMaster:为客户端提供查询服务和管理各个QueryMaster。
(2) QueryMaster:负责一个query的解析、优化与执行,它与多个task runner worker协同工作,完成一个query的计算。
如下图所示,Tajo采用传统数据库技术开发了SQL解析器,包括SQL解析,生成查询计划、优化查询计划、执行查询技术等,但与传统数据库不同,Tajo最终执行查询计划时借鉴了MapReduce的设计思想,它将查询计划转化为一系列任务,这样,执行查询计划实际上就是执行这些任务,而每个任务是一个计算单位,同Map Task和Reduce Task一样,它可以重复执行、有进度汇报等,这样,Tajo可以直接使用MapReduce中的容错、推测执行等机制。此外,Tajo使用YARN进行资源管理。
|