Impala在Hulu中的优化和改进

本文介绍了Impala在Hulu中的优化和改进,包括增加对ORC文件格式的支持、自动刷新元数据功能以及内置get_json_object函数的实现。Impala因其C++实现、LLVM的Code Generation和CBO等特性在Hadoop生态中的MPP系统中表现出优异性能。Hulu通过内核级开发解决了元数据刷新自动化和内存泄漏问题,提高了查询效率。
摘要由CSDN通过智能技术生成

背景


Impala是一个SQL on Hadoop的MPP查询引擎,由Cloudera主导开发并捐献给Apache软件基金会,在2017年底正式孵化成为Apache顶级项目。

如图,大数据领域里的OLAP系统种类繁多,它们各自有自己的特长和局限性,需要根据实际业务场景合理进行选择。存储方式往往决定了系统的能力和兼容性,跟据存储方式我们可以把它们分为三大类:

不存储原始数据,只保留聚合结果,如Druid、Kylin等

存储计算一体,自己实现存储层,如Greenplum、Clickhouse、Doris(原Baidu Palo)等

存储计算分离,依托HDFS、S3等实现存储层,这类系统又可以细分为两类:

使用自定义的文件格式,如HAWQ、VectorH等

使用开源文件格式,如Hive、Impala、Presto、SparkSQL、Drill等


第1类系统不保留原始数据,可以把性能做得很高,但由于聚合方式需要事先定义,比较适合报表类业务等查询模式相对固定的场景。当需要明细查询或交互式的灵活查询(Adhoc查询)时,仍需要另两类系统的加入才能支持。


第2类系统自己管理数据,可以做很多定制的优化,从而也能达到较高的性能。但由于数据没法与其它系统共享,往往需要将已有数据重新导入一次,在引入时需要考虑迁移成本以及多存一份数据的代价,因此一般在新建数仓中被考虑使用。第3.a类系统虽然依托外部存储,但因为采用封闭的文件格式,仍需要多存一份数据,其地位其实与第2类相同,常常在新建数仓时才被考虑。


使用最广的还是属于3.b类的系统,主要原因是基于Hadoop的数仓使用广泛,此类系统不需要重新生成一份数据,能与已有架构充分兼容。在此类系统中,Impala、Presto、Drill属于MPP(Massively Parallel Processing)系统,各节点流式地在内存中完成计算,中间数据几乎不落盘,相比Hive、SparkSQL等批处理系统能达到极高的性能。


在Hadoop生态圈的MPP系统中,Impala具有优异的性能,它的优势缘于:

C++实现,相比Presto、Drill等Java实现要更高效,也省去了Java GC的开销

基于LLVM的Code Generation,能根据实际数据类型生成高效的执行代码

CBO (Cost Based Optimizer),基于各表的统计信息得出代价最低的执行计划

缓存元数据,生成执行计划时不再需要和Hive、HDFS进行交互

RuntimeFilter,在运行时基于已读的小表数据裁剪大表需要扫描的数据量

Predicate/Aggregation Pushdown,虽然MPP系统都会有下推优化,但支

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值