大数据时代快速SQL引擎-Impala

背景

随着大数据时代的到来,Hadoop在过去几年以接近统治性的方式包揽的ETL和数据分析查询的工作,大家也无意间的想往大数据方向靠拢,即使每天数据也就几十、几百M也要放到Hadoop上作分析,只会适得其反,但是当面对真正的Big Data的时候,Hadoop就会暴露出它对于数据分析查询支持的弱点。甚至出现《MapReduce: 一个巨大的倒退》此类极端的吐槽,这也怪不得Hadoop,毕竟它的设计就是为了批处理,使用用MR的编程模型来实现SQL查询,性能肯定不如意。所以通常我也只是把Hive当做能够提供将SQL语义转换成MR任务的工具,尤其在做ETL的时候。

Dremel论文发表之后,开源社区涌现出了一批基于MPP架构的SQL-on-Hadoop(HDFS)查询引擎,典型代表有Apache Impala、Presto、Apache DrillApache HAWQ等,看上去这些查询引擎提供的功能和实现方式也都大同小异,本文将基于Impala的使用和实现介绍日益发展的基于HDFS的MPP数据查询引擎。

Impala介绍

Apache Impala是由Cloudera开发并开源的一款基于HDFS/Hbase的MPP SQL引擎,它拥有和Hadoop一样的可扩展性、它提供了类SQL(类Hsql)语法,在多用户场景下也能拥有较高的响应速度和吞吐量。它是由Java和C++实现的,Java提供的查询交互的接口和实现,C++实现了查询引擎部分,除此之外,Impala还能够共享Hive Metastore(这逐渐变成一种标准),甚至可以直接使用Hive的JDBC jar和beeline等直接对Impala进行查询、支持丰富的数据存储格式(Parquet、Avro等),当然除了有比较明确的理由,Parquet总是使用Impala的第一选择。

从用户视角

可以将Impala这类系统的用户分为两类,一类是负责数据导入和管理的数据开发同学,另一类则是执行查询的数据分析师同学,前者通常需要将数据存储到HDFS,通过CREATE TABLE的方式创建与数据match的schema,然后通过load data或者add partition的方式将表和数据关联起来,这一些流程串起来还是挺麻烦的,但是多亏了Hive,由于Impala可以共享Hive的MetaStore,这样就可以使用Hive完成此类ETL工作,然后将数据查询的工作交给Impala,大大简化工作流程(据我所知毕竟大部分数据开发同学还是比较熟悉Hive)。接下来对于数据分析师而言就是如何编写正确的SQ以表达他们的查询、分析需求,这也是它们最拿手的了,Impala通常可以在TB级别的数据上提供秒级的查询速度,所以使用起来可能让你从Hive的龟速响应一下提升到期望的速度。

Impala除了支持简单类型之外,还支持String、timestamp、decimal等多种类型,用户还可以对于特殊的逻辑实现自定义函数(UDF)和自定义聚合函数(UDAF),前者可以使用Java和C++实现,后者目前仅支持C++实现,除此之外的schema操作都可以在Hive上实现,由于Impala的存储由HDFS实现,因此不能够实现update、delete语句,如果有此类需求,还是需要重新计算整个分区的数据并且覆盖老数据,这点对于修改的实时性要求比较高的需求还是不能满足的,如果有此类需求还是期待Kudu的支持吧,或者尝试一下传统的MPP数据库,例如GreenPlum。

当完成数据导入之后,用户需要执行COMPUTE STATS

系统架构

从用户的使用方式上来看,Impal

  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值