本文是在2020 DataFunCon上所做分享的讲稿,感谢DataFun团队整理。由于篇幅较长,分为2篇来记录。
导读:网易大数据平台的底层数据查询引擎,选用了Impala作为OLAP查询引擎,不但支撑了网易大数据的交互式查询与自助分析,还为外部客户提供了商业化的产品与服务。今天分享的Impala在网易大数据中的的优化和实践,主要分为三个部分:
Impala有哪些优势,让我们选择Impala作为网易内部的OLAP查询引擎?
先来看一下Impala在数据处理中的角色。
对于数据量较少的场景,例如百万数据以下的情况,可以采用传统的关系型数据库,如MySQL或者PostgreSQL等,或者一些文档数据库,比如MongoDB等。随着数据量的增大,达到上亿级别时,一般选择分析型数仓来存储,并使用OLAP引擎来查询。此等规模的数据查询,对响应时间的要求虽然比关系型数据库要低,但一般也要求在秒级返回查询结果,不能有太大的延迟。Impala、Presto、Greenplum等都在此列。当规模继续扩大到上百亿以上时,则会选择批处理引擎,如Hive、Spark来进行数据处理。
今天分享的Impala就是针对分析型数仓的查询引擎。分析型数仓有很多种建模方式。
以Druid和Click House为代表的宽表模型,还有以Impala等为代表的星型/雪花型的建模方式。我们将Impala作为通用的查询引擎,比较典型的应用场景有自助数据分析、BI报表等。在分享的第三部分,有关于Impala在网易大数据平台“猛犸”中的介绍,以及在网易云音乐中的实际使用场景的说明。
网易为什么选择Impala作为OLAP查询引擎,Impala到底有哪些优势?Impala的优势,总结起来包括:
1.去中心化的MPP并行架构
相比于传统的关系型数据库,MPP架构可以充分发挥多服务器的特点,将数据量比较大的操作,分散在多台服务器上并行处理。这些复杂的大数据量的操作,对于单台服务器来说是无法完成的任务。
Impala还区别于其他MPP架构的引擎的一点,是Impala有多个Coordinator和Executor,多个Coordinator可以同时对外提供服务。多Coordinator的架构设计让Impala可以有效防范单点故障的出现。
2.优秀的查询性能
Impala支持CBO(基于代价的执行优化),除此之外,Impala还对Catalog进行了缓存。缓存的信息包括:库和表的信息、HDFS数据库、统计信息等。元数据都缓存在了Impala内部,在做CBO时,能够发挥更大的优势,做出更优的选择。除此之外,Impala同时具有典型的OLAP引擎应有的特征:静态代码生成支持LLVM、JIT;支持HDFS本地读区,减少访问NameNode、DataNode和数据网络传输的开销,对性能有比较大的提升;还有算子下推,runtime filter在Join时,对与join条件之外的列可以进行动态过滤。
从我们实际使用效果来说,Impala性能优势非常明显。前段时间我们对Impala、presto和spark3.0进行了对比测试。测试用例选择tpcds,并行节点8个。
总的来说,Impala相比Presto有明显的优势,相比Spark 3.0也有一定的优势。Spark 3.0对性能做了很多优化和改进,相比之下Impala性能有一些优势,不过Impala因为支持的SQL类型少一些,有一些tpcds的测试用例并不能完成。
3.友好的WebUI界面
一般来说,大数据查询引擎的查询计划,比关系型数据库的查询计划复杂的多。Impala提供了一个比较友好的WebUI,在这个界面上,能看到完整的执行计划、内存使用情况、异常查询分析,也可以通过界面终止查询语句。
此外,Impala的优势还体现在:完全兼容Hive元数据、Apache顶级项目有较高的社区活跃度、支持多种数据格式(Parquet、ORC等)、可以与Kudu结合使用等。
在我们生产实践中,也发现了Impala的一些不足,因此网易大数据团队对Impala进行了一些优化和增强。包括以下几个方面:
1.Impala管理服务器
Impala已经提供了WebUI的情况下,为什么需要一个管理服务器?
其中一个原因,是社区版的WebUI是非持久化的,一旦impalad异常退出,这些信息都会丢失。
我们通过MySQL存储WebUI上的信息,将统计信息、执行信息等重要信息保存到MySQL数据库中,实现持久化保存。在此基础上,管理平台给我们带来许多增值收益。相比于原生的WebUI,增强版的WebUI可以汇总各个coordinator执行的SQL语句,直观展示当前执行的SQL。
还可以作为集群持续优化的平台。因为记录了历史执行的SQL,可以为后续SQL优化提供依据,比如集群SQL的性能指标、随时间变化的性能表现,以及大部分SQL的执行时间。通过统计SQL执行失败的次数,出错SQL,为定位和回溯问题提供帮助。
2.元数据同步增强
Impala对元数据的缓存,一方面大幅提升了查询性能,但另一方面,元数据更新也带来了新的问题。因为数据可以不通过Impala客户端,而通过其他组件比如Hive进行更新,这就让Impala无法感知到元数据的更新。而老旧的元数据会导致查询失败或者性能下降。因此,需要一个机制能够让Impala及时感知元数据的更新。社区版提供了INVALIDATE METADATA这一命令,可以手动刷新元数据。不过如果一些用户不熟悉这个操作,没有更新Impala缓存的元数据,就会导致查询的问题。怎么解决这样的问题?
网易对此进行优化,引入了元数据自动同步机制:在Hive进行DDL相关操作时,记录操作日志,Impala通过消费操作日志,进行必要的Invalidate Metadata的操作,无须人工操作,大大提高了元数据缓存的可用性和实时性。对于提升Impala的查询性能,降低查询错误都有很大的帮助。
另外一个是元数据的黑白名单机制,配合Impala不同的元数据加载方式。对于启动时加载元数据的,配置黑名单,屏蔽不需要通过Impala查询的表;对于延迟加载元数据的,配置白名单,即刻加载元数据,避免首次查询时延迟过大。
另外需要提醒的是,Impala 3.x版本在元数据缓存管理上有了极大的改进,网易大数据团队也在调研中,准备从2.12升级到3.4版本。
未完待续……