`
joerong666
  • 浏览: 418074 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Impala/Hive现状分析与前景展望

 
阅读更多

Impala和Hive野史

提到Impala就不得不提Google的Dremel,处理PB级数据规模的基于SQL的交互式、实时数据分析系统。Dremel是Google推出的 PaaS数据分析服务BigQuery的后台。Google已经有了MapReduce,为什么还要开发Dremel呢?Dremel/Impala类系 统和MapReduce有什么区别呢?

Hadoop现在已经成为BigData应用系统的标配,那么基于Hadoop平台做大数据分析无非几种使用方式:

  优点 缺点 典型案例
自己写MapReduce任务 性能比Hive和Pig要高点 开发难度大 1) 搜索引擎网页处理,PageRank计算(Google)2) 典型的ETL(全盘扫描)3) 机器学习/聚类,分类,推荐等(百度Ecomm)
使用Hive做基于SQL的分析 对于数据分析师来说SQL太熟悉了 有些场景下性能不如MR 1) 用户访问日志处理/互联网广告(Yahoo, Facebook, hulu, Amazon)2) 电子商务(淘宝的云梯)
使用Pig做数据分析 Pig的语法不是很普及 有些场景下性能不如MR 统计和机器学习(Yahoo, twitter)
基于HBase开发的系统 基本可以达到准实时统计分析功能 目前没有开源实现,开发成本高 大多是自有系统,例如Google的Percolator,淘宝的prom

关于twitter使用Pig做机器学习方面的内容请参考SIGMOD2012的论文Large-Scale Machine Learning at Twitter。

我们都知道MapReduce是由Google发明的,Google发明这个当然首先是满足自己的应用需求。它们的主要需求就是对互联网网页的处理:网页 有效信息提取,转化,PageRank的计算。这种应用模式决定了这是一个批处理的系统。后来Facebook为了了解用户对其平台上广告点击的反馈,同 时给不会MR编程只会使用SQL的数据分析师开发了Hive这个东西,使得Hive在FB内部应用非常广泛。Yahoo设计Hadoop的时候是想把 Pig提拔成Hadoop平台的SQL标准,没想到半路杀出个程咬金,而且在Hive在工业界反响相当好,使得Hive的使用非常普及。目前互联网公司最 主要的盈利模式是广告,基于用户访问日志分析提高用户的广告点击率,我认为这个典型应用是目前Hadoop应用中最主要的应用场景。怪不得Jeff Hammerbacher认为把他主要的心思放到让用户去点击广告上是件愚蠢的事情,这哥们后来跳到Cloudera当了首席科学家。

可见Hive确实非常普及,国内的互联网公司也大多数在用Hive。但是Hive有个很大的缺点就是太慢了,面向的是批处理。很多问题是有时效性的,数据 一旦过了时效窗口就失去了意义。所以在大数据领域非常需要一个面向interactive,面向ad-hoc查询的实时SQL分析系统,在Dremel的 启发下,Impala诞生了。

Impala可以认为是在大数据领域的MPP,所以很多地方是很像Greenplum, AsterData这样的商用数据仓库产品的。所以当年MapReduce与MPP之争也算是有了个结果。Impala和这些商用系统的最大区别就是:Impala的可扩展性更好,支持的规模更大,面向的底层存储和硬件系统是commodity hardware。

Impala设计目标

分布式环境下通用SQL引擎:既支持OLTP也支持OLAP

SQL查询的规模和粒度:从毫秒级到小时级

底层存储依赖HDFS和HBase

使用更加高效的C++编写

SQL的执行引擎借鉴了分布式数据库MPP的思想而不再依赖MapReduce

Impala系统架构

1, SQL Interface

目前这部分是借用Hive的,包括ODBC/Beeswax。Client的SQL查询通过ODBC/Beeswax的Thrift API发送到集群内部的任何一个impalad,然后这个impalad就成了这个query的coordinator。

2, Unified metastore

Impala中表的元数据存储借用的是Hive的,也就是用个RDBMS来存储Impala中表的元数据信息。Impala自己提供一个叫 statestored的进程负责收集分布在集群中各个impalad进程的资源信息,用于query的调度(这个功能会在2013Q1末GA版本会提 供)。Statestored对外提供Thrift服务。这个statestored将来还会有个功能就是把impala表的metadata分发到各个 impalad中(也是在2013Q1末GA版本中提供)。

3, Impala daemon

名为impalad的进程,主要有两个角色:一是协调client提交的query的执行,给其他impalad分配任务,收集其他impalad的执行 结果进行汇总;二是这个impalad也会执行其他impalad给其分配的任务,在执行这部分任务主要就是对本地HDFS和HBase里的部分数据进行 操作了(都是本地IO操作,HDFS还支持dfs.client.read.shortcircuit跨过网卡直接磁盘读)。

Impala系统优缺点

目前支持Hive SQL的大部分功能,例如select, insert, where, join, union, subqueries, aggregation, order by only with limit。

Trevni文件格式是一个性能提升的突破点。

DDL通过Hive操控Hive的metastore来完成,因为Impala使用了Hive的metastore。

局限性:不支持UDF,不支持SerDes,只支持in-memory join,只有基本的cost-based optimizer。

Query执行过程

1,用户通过ODBC/Beeswax Thrift API提交query到某个impalad。Impalad的Query Planner使用jflex和CUP解析SQL语句。然后Planner把这个query的parse trees变成若干PlanFragment,然后把PlanFragment发送到backend/Query Coordinator。

PlanFragment由PlanNode组成的,能被分发到单独节点上原子执行,每个PlanNode表示一个relational operator和对其执行优化需要的信息。例如:AggregationNode, ExchangeNode, HBaseScanNode, HashJoinNode, HdfsScanNode, MergeNode, SortNode

2,Coordinator初始化相应impalad上的任务执行(存储了这个query相关数据的节点都会被分配任务)。

3,Query Executor通过流式交换中间输出。Query Coordinator汇总来自各个impalad的结果后返回给client;

在执行过程中如果遇到聚合函数limit n时,可以直接在每个impalad上截取top-n(该功能也是在2013Q1末GA版本提供)。

对于distributed-aggregation,还是先在各个impalad上做局部aggregation,然后在coordinator节点上 merge aggregation。目前貌似这个功能还做的很弱,基本上相当于reduce=1的MapReduce join。听说更强大的hash-partitioned aggregation/partitioned join正在开发中,这个feature很期待啊。

下面以一个SQL语句的执行过程为例说明:这个例子来自 http://www.sizeofvoid.net/wp-content/uploads/ImpalaIntroduction2.pdf  “SQL breakdown sample”一节里的例子,这是个查询,有JOIN,有条件查询,有aggregation,有sort的例子,基本上啥都有了。

select i_item_id, i_list_price, avg(ss_sales_price) agg1
FROM store_sales
JOIN item on (store_sales.ss_item_id = item.i_item_id)
JOIN customer on (store_sales.ss_customer_id = customer.c_id)
Where
i_list_price > 1000 and
c_gender = ‘M’ and
c_marital_status = ‘S‘ and
c_city in (‘Beijing’,'Shanghai’,'Guangzhou’)
group by i_item_id,
order by i_list_price
limit 1000
生成的plan tree是这样的:

而且还标明了哪些是可以分布式执行的,哪些是不能分布式执行的。

JOIN是数据库最重要的问题之一,一般的实现方法主要有Nested Loop Join,Sort-Merge Join和Hash Join。一般来说,查询优化器会首先考虑Nested Loop和Sort-Merge,但如果两个表都比较大且没有合适的索引时,才会考虑使用Hash Join。一般情况下只有Nested Loop Join能用在非等值join里。 关于数据库中的JOIN算法可以参考这篇文章:http://www.mysqlops.com/2011/03 /03/db-join-algorithm.html 。

那么在Hadoop中JOIN是怎么实现的呢?Hadoop做join主要有reduce-side join和map-side join两种方式。map-side join又可以分为小表全部载入内存和小表分块载入内存(bucket join)两种方式。 有关Hadoop join算法的实现可以参考这篇文章: http://dongxicheng.org/mapreduce/hadoop-join-two- tables/

那么Impala的JOIN是怎么做的?目前还是in-memory hash join,也就是参与JOIN的表一大一小,把那小表全部读到内存里。淘宝的MyFox系统当时也是这么做的,记得去年参加淘宝的校园招聘宣讲会的时候我 还问了这个问题呢。Impala已经在开发partitioned hash join了,不知道2013Q1末我们能不能用上啊。

性能测试

目前我已知的有两份测试数据:

这是Intel的测试数据,4节点集群比较了shark, impala和hive的性能:

  • count – counting the entire rows of the table;
  • groupby – find the sum of a column grouped by a key for the input table and limit result rows to 1;
  • join – join two input tables on specified keys and limit result rows to 1.

https://groups.google.com/forum/?fromgroups=#!topic/shark-users/IJ1U056dhDI

另一份来自http://www.sizeofvoid.net/wp-content/uploads/ImpalaIntroduction2.pdf :

Up to 90˟ times faster, compared with Hive

  • Purely I/O bound scenario, 3-4˟
  • with joins, 7-45˟
  • with memory cached, 20-90˟

代码结构

主要分为be/backend和fe/frontend,各部分功能如下:


最后,我想说一句的是,即使有了Impala,MapReduce在ETL方面还是有用的。

Impala目前bug太多,还不能用于工业生产,如果没有跳票的话,2013Q1末会有GA,期待那个时候会有稳定版本可用。

Hive/Impala畅想

Metadata除了存储表格元数据以外还应该存储一些表格的统计信息用来做SQL代价估计和执行优化。例如每一列数据分布的柱状图。

大表JOIN和group by在Impala里也是非常有挑战的issue。

Bucket join/partition join应该是Impala下一步非常迫切的需求。

既然Impala会把HBase作为底层存储,而普遍意义上认为HBase是为了写优化而设计的。那么HBase的读优化也是一个要提到日程的话题。

Avro, RCFile, Trevni(列存储和轻量级压缩)和Impala的融合是个非常值得期待的话题。

大表JOIN算法猜想:生成join中间表,不过这个表只有少数的几列:primary key 和 join column,这个中间表就非常小了,节省了很多网络传输带宽。然后就把它弄到各个Region上过滤满足条件的Record。

参考文献:

http://www.sizeofvoid.net/wp-content/uploads/ImpalaIntroduction2.pdf

http://www.slideshare.net/ChicagoHUG/an-introduction-to-impala-low-latency-queries-for-apache-hadoop

文章来源:

http://yanbohappy.sinaapp.com/?p=220

分享到:
评论

相关推荐

    jdbc 通过impala 连接hive库

    在大数据处理领域,Hive和Impala都是广泛使用的数据仓库工具。Hive提供了一个SQL-like接口来查询存储在Hadoop中的大数据集,而Impala则是一个高性能、实时查询的系统,设计用于处理大规模数据集。当需要从Java应用...

    springboot+mybatis+impala/mysql整合Demo

    springboot+mybatis+impala/mysql整合Demo , 内嵌PageHelper插件已整合,需要根据pom.xml中的备注操作即可使用mysql和PageHelper, impala 不支持PageHelper插件

    Impala与hive对比

    【Impala与Hive对比】 Impala和Hive都是基于Hadoop生态系统的数据查询工具,但它们在设计和性能上存在显著差异。Impala是由Cloudera受Google的Dremel启发开发的,旨在提供实时交互式的SQL大数据查询功能。与Hive...

    impala与hive的区别1

    总结来说,Impala通过优化的查询引擎和硬件加速实现了对大数据的快速查询,与Hive相比,Impala更适合实时分析,而Hive更适合批处理场景。两者的结合使用可以充分利用Hadoop生态系统的不同优势,满足各种分析需求。

    Impala与Hive的比较

    ### Impala与Hive的比较 #### 一、Impala简介与架构 ##### 1.1 Impala背景 Impala是Cloudera基于Google Dremel的启发所研发的一款实时交互式SQL查询工具,旨在为大数据环境下的查询提供低延迟性能。与传统的Hive+...

    Impala和Hive的关系(详解)

    Impala是基于Hive的大数据实时分析查询引擎,直接使用Hive的元数据库Metadata,意味着impala元数据都存储在Hive的metastore中。并且impala兼容Hive的sql解析,实现了Hive的SQL语义的子集,功能还在不断的完善中。...

    Hadoop Impala connect hive2 jdbc related

    Hadoop Impala connect hive2 jdbc related Hadoop Impala connect hive2 jdbc related

    jdbc 连接impala或者jdbc连接hive

    - **版本兼容性**:确保JDBC驱动与你的Hive或Impala版本兼容,否则可能会出现连接问题。 总的来说,通过JDBC,开发人员能够方便地在Java应用中集成Hive和Impala,实现对大数据的高效查询和处理。正确配置JDBC驱动...

    jdbc操作impala hive的jar包

    java通过jdbc操作impala hive的jar驱动包,Impala支持标准JDBC接口,允许从商业智能工具和用Java或其他编程语言编写的定制软件进行访问。JDBC驱动程序允许您从您编写的Java程序访问Impala

    impala jdbc hive

    标题中的“impala jdbc hive”指的是使用Java的JDBC(Java Database Connectivity)接口来连接和操作Impala与Hive这两个大数据处理系统。JDBC是Java编程语言中用于规范客户端程序如何访问数据库的应用程序编程接口,...

    1-4-Hive+and+Impala.pdf

    Impala 与Hive都是构建在Hadoop之上的数据查询工具各有不同的侧重适应面,但从客户端使用来看Impala与Hive有很多的共同之处,如数据表元数 据、ODBC/JDBC驱动、SQL语法、灵活的文件格式、存储资源池等。Impala与Hive...

    impala hive jdbc所依赖全部jar包

    impala_jdbc_2.5.41.1061(最新) hive_jdbc_2.5.19.1053(最新) 均包含英文使用说明文档,兼容绝大多数的hive/impala版本 该资源来自cloudera,仅用于分享知识,学习和交流,请勿用于商业用途

    cloudera-hive/impala-odbc

    而Impala是CDH中的一款实时查询服务,能够处理大规模数据集,提供低延迟的SQL查询,与Hive相比,Impala更适合实时分析和交互式查询。 描述中提到的"使用tableau 连接数据源用得到",Tableau是一款强大的数据可视化...

    大规模数据查询Hive及Impala技术原理及架构.pdf

    Hive 更侧重于批处理和数据仓库场景,而 Impala 则更适合于需要低延迟响应的实时分析。两者在实际应用中可以互为补充,根据具体需求选择合适的技术方案。随着大数据技术的发展,Hive 和 Impala 等工具将会继续发挥...

    Hue 常见问题解决方案,大数据平台的hue/hive常见问题总结 免费下载

    Hue集成了多个大数据组件,如HDFS、Hive、Pig、Spark等,使得数据分析师和开发人员可以方便地进行数据浏览、查询和分析。本文将围绕“Hue常见问题解决方案”这一主题,详细阐述Hue与Hive在大数据平台中可能遇到的...

    hive的安装与配置头歌.zip

    除了基础安装配置,还需要了解一些高级主题,如分区表、桶表、视图、外部表、Hive 与其他大数据组件的集成(如 HBase、Spark、Impala 等)以及性能优化策略。"资料必看.zip" 文件可能包含这些进阶内容,建议仔细阅读...

    基于 Impala 构建实时用户行为分析引擎.pdf

    在实战中,Impala可以与其他大数据工具,如Hue(Web UI)、Hive(元数据管理)等集成,形成完整的数据分析流程。例如,通过Hue,用户可以方便地在Web界面上提交Impala查询,查看结果,甚至创建复杂的多表JOIN操作。...

    Hadoop databases: Hive, Impala, Spark, Presto For ORACLE DBAs

    本文将探讨 Hadoop 生态系统中的四种主要工具——Hive、Impala、Spark 和 Presto,并对比它们与 Oracle 数据库的特点与应用场景,旨在帮助 Oracle DBA 们更好地理解和掌握这些新兴技术。 #### 二、Hadoop 概览 ...

Global site tag (gtag.js) - Google Analytics