概述
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》
最后
以上就是聪明过客为你收集整理的impala的全部内容,希望文章能够帮你解决impala所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复