一套数据,多种引擎

以前写过一篇文档讨论MPP DB的发展,《MPP DB 是大数据实时分析系统未来的选择吗?》,当时主要是想讨论下Greenplum数据库是否合适做数据存储,以及实时查询。文章我主要提的MPP DB短板是扩展性和对并发的支持,从目前Pivotal公司主推的HAWK,已经可以清楚的看到,业界主流的思路是SQL onhadoop,用传统引擎的高性能加上hadoop 存储的鲁棒性,来构建大数据实时分析。

一、为什么SQL on hadoop会流行?

SQL其实也是一种DSL,将复杂的数据操作抽象成几个关键字(insert,update,select,delect等),SQL易学易用,程序员和DBA掌握的很多。因此Hadoop成为流行的大数据分析解决套件之后,SQL on hadoop成为无法阻挡的趋势。总结两句话:为什么非要把SQL放到Hadoop上? SQL易于使用。那为什么非得基于Hadoop呢?the robust and scalable architecture of Hadoop。

SQL on hadoop有Dremel/PowerDrill(Google) Impala(Cloudera) HIVE/Stinger/Tez(Hortonworks) HAWK(EMC) SQL on spark/Shark(Berkeley) 等,这些系统各有各的发展历程,以及特点,同时也存在显著的缺点。

二、今天讨论一个思路:一套数据,多个引擎。

SQL on hadoop目前最成熟的应该是Hive,发展早,使用多。Hive是目前互联网企业中处理大数据、构建数据仓库最常用的解决方案,甚至在很多公司部署了Hadoop集群不是为了跑原生MapReduce程序,而全用来跑Hive SQL的查询任务。目前Hive的主要缺点:
1,data shuffle时网络瓶颈,Reduce要等Map结束才能开始,不能高效利用网络带宽
2,一般一个SQL都会解析成多个MR job,Hadoop每次Job输出都直接写HDFS,性能差
3,每次执行Job都要启动Task,花费很多时间,无法做到实时
4,由于把SQL转化成MapReduce job时,map,shuffle和reduce所负责执行的SQL功能不同。那么就有Map->MapReduce或者MapReduce->Reduce这样的需求。这样可以降低写HDFS的次数,从而提高性能。很明显,由于架构上的天然涉及,Hive只适合批处理。

Cloudera的impala是另外一个典型的代表,Impala可以看成是Google Dremel架构和MPP (Massively Parallel Processing)结构的混合体,根据Cloudera公司的宣传,也是目前业界开源的最快的引擎,相关测试结果可以参考http://blog.cloudera.com/blog/2014/05/new-sql-choices-in-the-apache-hadoop-ecosystem-why-impala-continues-to-lead/。

最近发布的CDH5.2中包含了impala 2.0,impala 2.0对SQL兼容性和关键的join有重大改进。

Impala 2.0 (Ships in Fall 2014)

1. SQL 2003-compliant analytic window functions (aggregation OVER PARTITION, RANK, LEAD, LAG, NTILE, and so on) – to provide more advanced SQL analytic capabilities

2. External joins and aggregations using disk – enables operations to spill to disk if their internal state exceeds the aggregate memory size

3. Subqueries inside WHERE clauses

4. Incremental statistics – only run statistics on the new or changed data for even faster statistics computations

5. Additional data types – including VARCHAR, CHAR

6. Additional built-in functions – enables easier migration of custom language extensions for users of traditional SQL engines

当能impala也不是包打天下,对批量数据的处理如数据挖掘分析,还是不如HIVE稳定可靠。而impala天然是继承Hive的元数据,所以完全可以综合两者的优点,同一套数据,多个引擎。Impala应对秒级的交互查询,Hive应对批量数据的分析。下面是impala官方介绍的impala和Hive的关系。

How Impala Works with Hive

A major Impala goal is to make SQL-on-Hadoop operations fast and efficient enough to appeal to new categories of users and open up Hadoop to new types of use cases. Where practical, it makes use of existing Apache Hive infrastructure that many Hadoop users already have in place to perform long-running, batch-oriented SQL queries.

In particular, Impala keeps its table definitions in a traditional MySQL or PostgreSQL database known as the metastore, the same database where Hive keeps this type of data. Thus, Impala can access tables defined or loaded by Hive, as long as all columns use Impala-supported data types, file formats, and compression codecs.

The initial focus on query features and performance means that Impala can read more types of data with the SELECT statement than it can write with the INSERT statement. To query data using the Avro, RCFile, or SequenceFile file formats, you load the data using Hive.

The Impala query optimizer can also make use of table statistics and column statistics. Originally, you gathered this information with the ANALYZE TABLE statement in Hive; in Impala 1.2.2 and higher, use the Impala COMPUTE STATS statement instead. COMPUTE STATS requires less setup, is more reliable and faster, and does not require switching back and forth between impala-shell and the Hive shell.

如果需要更高的OLAP分析速度,可以考虑kylin,最近有ebay开源的OLAP引擎。核心思路,数据提取建模,通过HIVE将数据转换成cube,存入HBASE中方便查询。这个就是要求提前建立cube,智能应对特定的模型。

三、需要做的工作:

要做到HIVE/impala共一套数据,其实也有很多工作。目前impala主要在Parquet格式下性能高,HIVE主要使用的是ORCFile。两种存储格式都是列式存储,各有优势。Parquet主要是支持嵌套式数据,ORCFile的每个strip中有一段index data。Index data包含每列的最大和最小值以及每列所在的行。行索引里面提供了偏移量,它可以跳到正确的压缩块位置。具有相对频繁的行索引,使得在stripe中快速读取的过程中可以跳过很多行,尽管这个stripe的大小很大。所以需要两个引擎各自兼容对ORCFile/Parquet的支持,或者融合两种存储格式的优点,让HIVE/impala支持。

本文转自:http://jiezhu2007.iteye.com/blog/2153589?utm_source=tuicool

时间: 2024-10-11 15:23:36

一套数据,多种引擎的相关文章

上:Spark VS Flink – 下一代大数据计算引擎之争,谁主沉浮?

作者简介 王海涛,曾经在微软的 SQL Server和大数据平台组工作多年.带领团队建立了微软对内的 Spark 服务,主打 Spark Streaming.去年加入阿里实时计算部门,参与改进阿里基于 Apache Flink 的Blink 平台. 导读: 做大数据绝对躲不过的一个热门话题就是实时流计算,而提到实时流计算,就不得不提 Spark 和 Flink.Spark 从 2014 年左右开始迅速流行,刚推出时除了在某些场景比 Hadoop MapReduce 带来几十到上百倍的性能提升外,

高性能的数据分组引擎Essential Grouping

Essential Grouping控件是一款高性能的数据分组引擎,可以对任何列表数据进行分组,实时数据分组,可以处理大量动态数据,存取过滤结果,显示统计信息,可进行数据添加.删除.修改等操作. 具体功能: 支持多列分类.过滤.分组统计和嵌套表 该控件和界面独立,可以使用任何UI控件 支持对任何IList数据源进行分类 强大的统计计算 可以存取列的最大值.对每个分组进行求和,统计.平均值等 内嵌多种统计函数 支持多层数据表和嵌套表进行分组 支持编辑.新增.删除记录 内置多种过滤条件 支持插入计算

Cubert:LinkedIn开源的大数据计算引擎

近日, Linkedin 宣布开源其正在使用的大数据计算引擎 Cubert ,该框架提供了一种新的数据模型来组织数据,并使用诸如MeshJoin 和Cube算法等算法来对组织后的数据进行计算,从而减轻了系统负荷和节省了CPU资源,最终提供给用户一个简单.高效的查询.Cubert比较适合的计 算领域包括统计计算.聚合.时间距离计算.增量计算.图形计算等. Cubert整个架构可分为三层,第一层是数据流语言层,主要用来实现执行计划,包括 Apache Pig . Apache Hive 以及Cube

如何使用Iveely的数据存储引擎 Iveely Database

Iveely 数据存储引擎是为Iveely 搜索引擎提供数据存储的机制. 适用于:频繁数据插入.数据读取.数据更改或者删除数据不适合Iveely Database,存储结构是按照搜索引擎数据存储要求(频繁读.频繁写.几乎无删)设计,因此不是所有的数据存储都可以用Iveely Database. 安装部署       在下载的Iveely database中,只需要启动RunDatabase.bat,Linux下,直接启动Iveely.Database.jar,启动后,打开UI下的index.ht

财务发票数据识别引擎(SDK)

应用背景 随着经济的全球化发展和融合,越来越多的大中型中国企业开始建设部署FSSC(财务共享中心). 建设FSSC(财务共享中心)面临的压力之一是原始账务数据的取得和管理,传统数据采集是人工整理原始报销票据,然后进行扫描影像,再到会计人工录入,再到凭证审核,而智能数据采集方式是采用OCR(光学字符识别)扫描识别技术,自动采集发票上的会计要素,自动对票据建立索引并归档,提高凭证信息查阅的一致性与准确性,与传统的会计人工录入数据方案相比,OCR扫描识别方案可以减少70%的工作量. 技术概述 财务发票

artTemplate高性能数据模板引擎

相信数据模板引擎这个东西对于前端还是后台程序员来说都不陌生.我个人也非常讨厌用字符串拼接,字符串拼接用多了就会使代码看起来很乱,而且后期维护起来很不方便.现在前端数据渲染中出现了很多更好的方案,前端主流的mvc,mvvm框架如angular,vue,react等都自带响应式数据渲染功能,因此很多时候对前端开发者来说用框架渲染再合适不过了.但有些时候就不需要框架别的功能,只需要数据渲染的话就那这些框架来渲染不太合适了.这个时候后我们需要一些具有数据渲染能力的轻型引擎.artTemplate就是一个

.net之工作流工程展示及代码分享(三)数据存储引擎

数据存储引擎是本项目里比较有特色的模块. 第一,使用接口来对应不同的数据库.数据库可以是Oracle.Sqlserver.MogoDB.甚至是XML文件.采用接口进行对应: 1 public interface IWorkflowDB 2 { 3 List<Flow> GetFlows(); 4 bool SaveFlow(Flow flow); 5 bool DeleteFlow(Guid flowId); 6 7 FlowInstance GetFlowInstanceByInstance

资料:MVC框架+SQL Server 数据集成引擎

ylbtech-资料:MVC框架+SQL Server 数据集成引擎 1.返回顶部 1. 功能特点: MVC框架耦合性低视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码,同样,一个应用的业务流程或者业务规则的改变只需要改动MVC的模型层即可.因为模型与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则.模型是自包含的,并且与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则.如果把数据库从MySQL移植到Oracle.SQLServer,或者改变基于

template.js 数据渲染引擎

template.js 数据渲染引擎 template.js是一款JavaScript模板引擎,用来渲染页面的. 原理:提前将Html代码放进编写模板 <script id="tpl" type="text/html"></script> 中,当需要渲染页面时,在js里这样调用: var tpl = document.getElementById('tpl').innerHTML; template(tpl, data}); template