Impala 在网易大数据的优化和实践

news2024/9/29 5:23:06

导读: 网易大数据平台的底层数据查询引擎,选用了 Impala 作为 OLAP 查询引擎,不但支撑了网易大数据的交互式查询与自助分析,还为外部客户提供了商业化的产品与服务。今天将为大家分享下 Impala 在网易大数据的优化和实践。

01 Impala 的定位及优势

Impala 有哪些优势,让我们选择 Impala 作为网易内部的 OLAP 查询引擎?

1. Impala 在数据处理中的角色

先来看一下 Impala 在数据处理中的角色。

对于数据量较少的场景,例如百万数据以下的情况,可以采用传统的关系型数据库,如 MySQL 或者 PostgreSQL 等,或者一些文档数据库,比如 MongoDB 等。随着数据量的增大,达到上亿级别时,一般选择分析型数仓来存储,并使用 OLAP 引擎来查询。此等规模的数据查询,对响应时间的要求虽然比关系型数据库要低,但一般也要求在秒级返回查询结果,不能有太大的延迟。Impala、Presto、Greenplum 等都在此列。当规模继续扩大到上百亿以上时,则会选择批处理引擎,如 Hive、Spark 来进行数据处理。

今天分享的 Impala 就是针对分析型数仓的查询引擎。分析型数仓有很多种建模方式。

以 Druid 和 Click House 为代表的宽表模型,还有以 Impala 等为代表的星型/雪花型的建模方式。我们将 Impala 作为通用的查询引擎,比较典型的应用场景有自助数据分析、BI 报表等。在分享的第三部分,有关于 Impala 在网易大数据平台“猛犸”中的介绍,以及在网易云音乐中的实际使用场景的说明。

2. Impala 的优势

网易为什么选择 Impala 作为 OLAP 查询引擎,Impala 到底有哪些优势?Impala 的优势,总结起来包括:

  • MPP 架构,去中心化

  • 优秀的查询性能

  • 友好的 WebUI 界面

  • 完全兼容 Hive 元数据

  • Apache 顶级项目,社区活跃度高

  • 支持多种数据格式( Parquet/ORC 等)

  • 与 Kudu 结合使用,实时数仓

① 去中心化的 MPP 并行架构

相比于传统的关系型数据库,MPP 架构可以充分发挥多服务器的特点,将数据量比较大的操作,分散在多台服务器上并行处理。这些复杂的大数据量的操作,对于单台服务器来说是无法完成的任务。

Impala 还区别于其他 MPP 架构的引擎的一点,是 Impala 有多个 Coordinator 和 Executor,多个 Coordinator 可以同时对外提供服务。多 Coordinator 的架构设计让 Impala 可以有效防范单点故障的出现。

② 优秀的查询性能

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 的测试用例并不能完成。

③ 友好的 WebUI 界面

一般来说,大数据查询引擎的查询计划,比关系型数据库的查询计划复杂的多。Impala 提供了一个比较友好的 WebUI,在这个界面上,能看到完整的执行计划、内存使用情况、异常查询分析,也可以通过界面终止查询语句。

此外,Impala 的优势还体现在:完全兼容 Hive 元数据、Apache 顶级项目有较高的社区活跃度、支持多种数据格式(Parquet、ORC 等)、可以与 Kudu 结合使用等。

02 对 Impala 的一些增强和优化

在我们生产实践中,也发现了 Impala 的一些不足,因此网易大数据团队对 Impala 进行了一些优化和增强。包括以下几个方面:

  • Impala 管理服务器

  • 元数据同步增强

  • 基于 zookeeper 的服务高可用

  • 支持更多存储后端

  • 其他增强和优化

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 版本。

3. 基于 ZK 的服务高可用

虽然每一个 Impalad 都可以作为 Coordinator,对外提供访问服务,接受客户端请求,但是缺乏一个路由机制。当一个 client 连接的特定 coordinator 失效之后,就无法在进行查询了。

网易大数据团队参考 Hive 的实现,引入 zookeeper 作为访问代理,客户端首先通过 zookeeper 找到可用的 coordinator 节点,然后再提交 SQL 查询请求。通过这种方式,提供了更健壮的查询服务模式。

4. 支持更多存储后端

对于后端存储的支持,网易团队增加了对 iceberg 表的创建和查询的支持。已经在云音乐业务上使用,并且贡献给了 Impala 社区。

其他后端还包括对 Alluxio 的支持,使用 Alluxio 作为 Impala 和 HDFS 之间的二级缓存。这方面的详细信息,可以搜索《网易严选:基于 Alluxio+Impala 深度融合架构的 BI 系统性能优化实践》。

此外对接 Elastic Search 查询,充分发挥了 ES 倒排索引的优势。

5. 其他增强和优化

其他的增强还有:权限的优化、Hive 多版本适配、支持 JSON,以及社区版的一些 Bug 修正。

03 Impala 在网易的使用案例分析

1. Impala 的部署和使用

Impala 两种部署方式:混合部署与独立部署。混合部署是指 Impala 和其他大数据组件共用 HDFS。而独立部署则是为 Impala 配置独立的 HDFS。独立部署的优势在于 IO 和网络通信都有保障,对性能和稳定性的提升有帮助。但是代价也十分明显:成本上升。

Impala 与 Kudu 结合,可以用来构建实时数仓。Kudu 增量写入,定期保存到 HDFS。Kudu 的使用一方面提供了更新数据和删除数据的能力,另一方面也解决了 HDFS 上小文件的问题。而 Impala 可以同时查询 Kudu 和 HDFS 上的数据。

网易内部对集群的监控,对接了网易内部的哨兵服务。可以提供准实时的告警能力。运维人员通过设置阈值,订阅告警信息,从而了解集群的监控程度。

此外,对于 Impala 集群的部署和使用,还有几点需要注意:

  • 按照大业务划分不同的集群

  • 按照不同的子业务或者 SQL 类型划分队列

  • coordinator 节点与 executor 节点分开部署

  • 对于机器数比较少的集群,机器上可部署多个节点,增加并发

  • 业务方重试机制,以免 impalad 节点挂掉导致 SQL 失败

  • 通过 impala hint 改变表的 join 方式

  • 结合实际情况参考是否设置 mem_limit ,设置多大 mem_limit

2. 网易大数据中的 Impala

在网易大数据平台“猛犸”中,Impala 位于数据计算层,提供交互式查询的能力,对应的应用场景是自助分析。

在网易对外提供的产品和服务中,复杂报表和自助取数,都用到了 Impala。其中自助分析服务适用于有一定 SQL 基础的用户,通过自己写 SQL 语句,查询数据。灵活性比较大,同时门槛也比较高。

网易有数的自助取数服务(easyFetch)可以通过拖拽维度和度量,方便的获取数据,并生成图表报告。后端对接的是网易有数的 API。非常适合非专业人员使用数据,发挥出数据的生产力。

网易现在内部有 8 个 Impala 集群,超过 200 个节点,最大集群规模超过 60 个节点。除了内部服务外,对外的商业化服务,已经有超过 20 个 Impala 集群。

3. Impala 在云音乐的使用实践

网易云音乐,有 2 个 Impala 集群,超过 60 个节点的规模。主要的应用场景包括:有数报表、自助分析、音乐版权、A/B 测试,easyFetch 等等。绝大部分应用场景下,Impala 的查询时间不超过 2 秒。

云音乐 A/B 测试早期使用 Spark 按照小时粒度,完成从 ODS 到 DWD 层的数据清洗工作,之后生成用户分流表和指标统计表,再使用 Spark 关联这两张表的结果写入到 Kudu 中,最后使用 Impala 对接数据,供用户查询。这样数据延迟至少 1~2 小时,有些结果甚至在第二天才能看到。但是对于 A/B 测试,能够实时看到结果才是最好的。

对此云音乐团队基于 Flink 做了实时性改造。将 DWS 变成流表,这样 Impala 可以同时查询 T+1 的结果表和流表中的实时数据。A/B 测试的效果就可以近实时的看到了。

今天的分享就到这里,谢谢大家。

作者介绍

温正湖,网易杭研高级数据库技术专家

杭研大数据产品中心 OLTP&OLAP 内核团队负责人。10 年数据库和存储开发经验,专注于数据库、数仓技术和分布式系统架构;累计申请 10+技术发明专利 ( 已授权 8 个 ),《MySQL 内核:InnoDB 存储引擎 卷 1》作者之一。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/381438.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

qnx的spi记录

https://www.cnblogs.com/schips/p/protocol_spi_about.html (主要)https://www.zhihu.com/question/308406342/answer/2901148391https://www.bbsmax.com/A/lk5aa4Pm51/ (有基础测试代码)https://baijiahao.baidu.com/s?id17460…

聚焦技术前沿 引领行业未来 | 第四届OpenI/O 启智开发者大会深度学习与大模型产业应用专场论坛顺利举办!

为探索人工智能的重要发展方向,深入了解大模型、深度学习领域,推动人工智能的快速发展,2月24日,第四届启智开发者大会以“引领前沿技术,推动产业升级”为主题的“深度学习与大模型产业应用专场”在深圳人才研修院智汇中…

数学知识(算法模板)

数学知识 文章目录数学知识一、质数一、试除法判定质数二、试除法分解质因数三、朴素筛法求素数四、线性筛法求素数二、约数一、试除法求所有约数二、约数个数约数之和三、欧几里得算法三、欧拉函数一、欧拉函数的定义二、筛法求欧拉函数四、快速幂一、快速幂二、快速幂求逆元扩…

Vue中rules表单验证,表单必填*显示位置不对,*显示位置错误

<el-form :model"ruleForm" :rules"rules" ref"ruleForm"><el-form-item label"名称" prop"name"><el-input v-model"ruleForm.name"></el-input></el-form-item> </el-form>…

.NET 使用NLog增强日志输出

引言 不管你是开发单体应用还是微服务应用&#xff0c;在实际的软件的开发、测试和运行阶段&#xff0c;开发者都需要借助日志来定位问题。因此一款好的日志组件将至关重要&#xff0c;在.NET 的开源生态中&#xff0c;目前主要有Serilog、Log4Net和NLog三款优秀的日志组件&…

少儿编程 电子学会图形化编程等级考试Scratch一级真题解析(判断题)2022年12月

2022年12月scratch编程等级考试一级真题 判断题(共10题,每题2分,共20分) 26、可以通过四种方式添加新角色(不包括复制已有角色):选择一个角色、绘制、随机、上传角色 答案:对 考点分析:考查角色添加的方式,角色添加四种方式分别为题目给出的四种,所以正确 27、角…

分布式事务总结

1. 分布式事务产生的背景 1.1 数据库水平拆分 对于大部分的业务而言&#xff0c;在起步阶段&#xff0c;为了快速上线&#xff0c;一般都是单库单表的。但是随着业务的扩张&#xff0c;数据量也随着扩增&#xff0c;单库的性能逐渐变差&#xff0c;就会有数据库的单点压力。因…

大数据常见术语

大数据常见术语一览 主要内容包含以下&#xff08;收藏&#xff0c;转发给你身边的朋友&#xff09; 雪花模型、星型模型和星座模型 事实表 维度表 上钻与下钻 维度退化 数据湖 UV与PV 画像 ETL 机器学习 大数据杀熟 SKU与SPU 即席查询 数据湖 数据中台 ODS&#xff0c;DWD&…

过滤器的创建和执行顺序

过滤器的创建和执行顺序 8.1.1创建并配置过滤器 P143 重点是如何创建并配置&#xff08;xml&#xff09; 1.创建 public class EncodingFilter implements Filter {Overridepublic void init(FilterConfig filterConfig) throws ServletException {}Overridepublic void doFil…

Linux进程间通信:信号量(一)

前提知识 在介绍信号量之前&#xff0c;先来看看一些概念和一些简单的前提知识&#xff1a; 进程间通信的前提是让不同的进程看到同一份资源。于是&#xff0c;就有提出让这种资源成为一种公共资源的方法&#xff0c;方法的提出&#xff0c;导致了一种新的问题的出现&#xf…

MyBatis源码分析(二)SqlSessionFactory的构建及配置文件读取过程

文章目录一、MyBatis配置文件二、SqlSessionFactory的获取1、初始化XML配置的Document以及其他对象2、解析配置文件&#xff08;1&#xff09;配置Environment&#xff08;2&#xff09;存放Mapper&#xff08;3&#xff09;解析Mapper3、构造SqlSessionFactory4、总结未完待续…

测试2年,当初一起入行的朋友很多月薪20k了,自己却还没过万,到底差在了哪里?

说来奇怪&#xff0c;不管是读书还是工作&#xff0c;都存在一个现象&#xff0c;那就是人比人&#xff0c;比死人。读书的时候&#xff0c;不管是老师还是家长口中&#xff0c;总会有一个“别人家的孩子”。同样&#xff0c;到工作中&#xff0c;领导口中总会有一个“别人的员…

Doxygen 详细使用

doxygen的安装和基本使用可参考&#xff1a;Doxygen的安装和基本使用常用选项doxygen的所有选项的参考文档&#xff1a;doxygen官网文档2、样式说明doxygen可以自己自定义样式。手写 .css文件 &#xff08;可以查看doxygen的源码&#xff0c;进行相对应修改&#xff09;在Exper…

推荐一个.Net Core开发的蜘蛛爬虫开源项目

更多开源项目请查看&#xff1a;一个专注推荐.Net开源项目的榜单 如果我们需要抓取网络上的数据&#xff0c;这时候我们就要写爬虫&#xff0c;这里面就涉及到网页的抓取、以及网页分析与数据提取、抓取的性能等知识&#xff0c;今天就给大家推荐一个开源项目&#xff0c;它可以…

java基础复习(练习写博客)

文章目录Java特性和优势java三大版本JDK、JRE、JVM(从前到后包含)Java开发环境搭建步骤Java程序运行机制IDEJava基础语法一、注释、标识符、关键字二、数据类型&#xff08;shift双击问题&#xff09;三、变量、常量、作用域四、运算符五、包机制、JavaDocJava进阶语法一、Scan…

【Java】代码中的安全漏洞解决合集(更新中)

汝之观览&#xff0c;吾之幸也&#xff01;本文主要讲解Java的一些安全漏洞&#xff0c;并且给出浅知的解决方案。 具体国内的风险可查看网址工业和信息化部网络安全威胁和漏洞信息共享平台 1、Spring Framework反射型文件下载漏洞&#xff08;CVE-2020-5421&#xff09; 漏洞…

Linux 进程:fork()与vfork()的对比

目录一、fork函数二、vfork函数1.函数的原理2.函数的隐患3.解决函数隐患的方法在Linux的进程学习中&#xff0c;常使用fork函数来创建子进程&#xff0c;但其实还有一个vfork函数也可以创建子进程。但是这两个函数的实现机制不同&#xff0c;fork函数使用了写实拷贝技术&#x…

Ubuntu 20搭建srs3.0

SRS官网&#xff0c;v3Home介绍&#xff0c;部署帮助。 1.创建一个srs项目文件夹 2.进入后用git命令拉取3.0release版本&#xff1a;git clone -b 3.0release https://gitee.com/ossrs/srs.git 3.进入srs/trunk目录打开终端输入命令&#xff1a;./configure 4.继续输入命令&a…

Python+tkinter添加滚动条

大家好&#xff0c;我是IKUN的真爱粉&#xff0c;有时候我们需要在tkinter上加滚动条&#xff0c;那么怎么制作呢&#xff0c;我们先看下面的视频展示效果&#xff0c;是不是你想要的 展示 感觉制作的略微粗糙&#xff0c;各位可以后期自己慢慢调整 创建滚动条重要的步骤是&a…

【C++进阶】四、STL---set和map的介绍和使用

目录 一、关联式容器 二、键值对 三、树形结构的关联式容器 四、set的介绍及使用 4.1 set的介绍 4.2 set的使用 五、multiset的介绍及使用 六、map的介绍和使用 6.1 map的介绍 6.2 map的使用 七、multimap的介绍和使用 一、关联式容器 前面已经接触过 STL 中的部分…