impala

Impala是什么

       Impala是cloudera发布的基于hadoop平台的sql查询引擎,本质上一个MPP(massive parallel process)查询引擎。

目的

  • 提供类似传统商用数据库的交互式查询功能
  •  解决hive只支持批量处理不支持实时查询的问题
  •  能够处理超大规模的数据集

Architecture



         Impala的前端,SQL解析借鉴的是Hive现有的成果,例如前段的ODBC等sql访问接口;


 核心组件

Query Planner

  • 作用是根据SQL解析结果生成执行计划
  • Hive里面已经有类似的东西,hive的做法是根据sql解析结果由logical plan generator生成一个逻辑计划logical plan,然后由Optimizer生成物理计划physical plan
  •  Impala的Planner作用跟Hive的plan generator+Optimizer类似。不同之处是Hive的物理计划就是多个MapReduce DAG图,而Impala的执行计划应该是自己实现的一个类似于MapR的job和task。
  • 不太清楚Impala的Optimizer是基于规则的优化器还是基于代价的优化器

Query Coordinator/Query Executor

  • Query Coordinator功能类似于MapR的job tracker
  • Query Executor类似于task tracker
  • 区别是Impala的这两者都是Deamon进程,而不是MapR一样要启动一个JVM去执行task,Impala效率会更高一些
  • Hive的多个MapReduce job之间的中间结果输入输出是通过HDFS的,Impala的中间结果是基于内存的data stream,这点上Impala效率高很多

图中还有一个关键的组件未展示,即Parquet。

  • Parquet逻辑上是介于Query Executor跟HDFS/Hase之间,相当于Impala的存储引擎或者底层存储的数据结构
  •  Parquet+HDFS/Hbase对Impala,相当于Innodb+磁盘文件系统对mysql
  • Parquet的仿照google的Dremel里面的ColumnIO,可嵌套的列式存储
  • 如果要想做到尽可能的并行,底层的数据结构必须要做成Column Oriented
  • ColumnIO这种数据组织方式的优点是做到了去掉rowkey,真正的column stripe,并行度高, scan效率高,数据易压缩。
  • parquet基于有限自动机的方式对存储数据进行快速的还原
  • parquet查询是全表扫描没有索引,但是parquet由于分成的不同的列,更容易实现query predicate push down。

注:

hbase还不是完全的columner,hbase虽然按照列族分开存储,但是每个column记录都有一个rowkey,这是hbase解决某些列的column数据稀疏的方法。ColumnIO这采用的完全不同的方法解决稀疏列的问题,ColumnIO是针对每个column的value记录两外两个额外的维度repeatition level和definition level。


对比

         Impala vs Hive

  • Impala自己实现了分布式计算框架,不像Hive是建立在MapReduce job基础上了。MapReduce本身不是内存计算,中间结果需要磁盘I/O,效率不高。
  • Impala实现了原生的分布式关系查询引擎,应该针对中间结果传输效率和计算地理位置的选择做过优化
  • Hive实现简单,join依赖于MapR,一次查询还需要多个MapR job产生大量基于磁盘IO的中间结果,中间结果的transfer的overhead过多;hive对于计算节点的地理位置没有特别的综合考虑。
  • Impala或者stringer的关键优化是:实现了一次查询对应一个map+多个reduce,而Hive要实现多个reduce这需要生成多个job,这样一来Hive的效率肯定是低的。

         Impala vs EDW/RDBMS

  •  Impala强调的一个特性是Impala重点在于支持unkown queries,而EDW/RDBMS在于know queries
  • EDW/RDBMS的强项是事务
  •  Impala处理的数据规模

         Impala vs shark

  • Shark是UC berkeley AMPlab主持开发的BDAS(Berkeley data analytic stack)中的SQL查询引擎;
  • Shark基于BDAS中的分布式内存 框架shark;

         Impala vs Stinger

  •  Stinger是cloudera的竞争对手hortonworks推出的下一代hive,基于hive做了演进。其中特点是引入了Tez(基于内存的计算框架)        

主要参考文献

《Dremel:InteractiveAnalysis of Web-Scale Datasets》

《Hive-A WarehouseingSolution over a Map-Reduce Framework》   

《Cloudera Impala: Amodern SQL Engine for Hadoop》

《Big Data Research in the AMPLab: BDAS and beyond》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值