百度案例:使用Alluxio提速数据查询30倍

2023-10-09 03:08

本文主要是介绍百度案例:使用Alluxio提速数据查询30倍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作为全球最大的中文互联网搜索提供商,百度在其产品数据服务系统方面经验丰富。在本案例研究中,百度的高级架构师刘少山分享了他们在生产环境中使用Alluxio的经验,以及为什么Alluxio能够带来显著的性能提升。使用Alluxio将原先的批处理查询将转换为交互式查询,这使百度能够以交互方式分析数据,从而提升了生产力,并改善了用户体验。


业务挑战

百度作为中国最大的搜索引擎,这意味着我们有很多的数据,如何管理这种规模的数据并快速提取其中的有用信息一直是一个挑战。

举例来说,庞大的数据量常常会导致查询需要花费数十分钟甚至数小时才能完成,因此需要让产品经理等待数小时才能开始下一个查询。更令人沮丧的是,改动查询后将需要重新运行整个过程。大约在一年前,我们意识到需要一个特殊的查询引擎来解决这些问题。首先,我们提出了一个目标规范:该查询引擎需要管理数PB的数据,并能在30秒内完成95%的查询。

我们将查询引擎从Hive切换到了Spark SQL(许多用例已经证明了它在延迟方面相对Hadoop MapReduce具有优势),我们期望Spark SQL能将平均查询时间降到几分钟之内。但是,它没有达到我们所希望的查询响应时间。虽然Spark SQL确实将平均查询速度提升了4倍,但仍需10分钟左右才能完成。

因此,我们再次仔细思考,挖掘分析更多细节。事实证明,这个阶段的查询瓶颈不再是CPU而是数据传输网络。由于PB级别的数据分布在多个数据中心,因此数据查询很可能需要将数据从远程数据中心传输到计算所在数据中心,这就是导致用户运行查询时出现很大延迟的原因。由于数据存储中心节点和数据计算中心节点具有不同的最优硬件规格,因此解决方案并不是将计算过程移动到存储数据中心那么简单。我们需要一个内存级的存储系统来存储常用的数据,并且该系统能够位于计算节点上。


为什么选择Alluxio

我们需要一个内存级的存储系统。该存储系统不仅能够提供高性能和可靠性,还能管理数PB的数据。我们开发了一个使用Spark SQL作为其计算引擎的查询系统,将Alluxio作为本地内存级存储解决方案。我们使用百度内部的标准查询作为压力测试方案,需要从远程数据中心提取6TB数据,然后在数据之上运行其他分析,整个压力测试持续了1个月。

结果表明,Alluxio带来了优异的性能提升。如果系统仅使用Spark SQL,平均查询需要100-150秒才能完成。加上Alluxio后,平均查询耗时10-15秒。此外,如果所有数据都存储在Alluxio本地节点上,则只需要大约5秒钟,比单独使用Spark SQL30倍。基于以上结果和系统可靠性方面考虑,我们围绕AlluxioSpark SQL构建了一个完整的大数据查询系统。

我们的系统包含以下组件:

  • 操作管理器:包装Spark SQL的持久化Spark应用程序。它接受来自查询UI的查询,并提供查询解析和查询优化功能。

  • 视图管理器:管理缓存元数据并处理来自操作管理器的查询请求。

  • Alluxio:用作存储常用数据内存级存储系统,提供计算本地性。

  • 数据仓库:基于HDFS系统的远程数据中心,用于存储数据。

下面,我们将介绍整个系统的执行流程:

  1. 查询已提交。操作管理器分析查询并询问视图管理器数据是否已在Alluxio中。

  2. 如果数据已经在Alluxio中,操作管理器从Alluxio中获取数据并对其执行分析。

  3. 如果数据不在Alluxio中,那么该数据未命中缓存。操作管理器将直接从数据仓库请求数据。同时,视图管理器启动另一个作业以从数据仓库请求相同的数据并将数据存储在Alluxio中。这样下次提交相同的查询时,数据已经在Alluxio中。


收益

系统部署后,我们使用典型的百度查询测量其性能。使用原始的Hive系统,需要超过1,000秒才能执行完成该典型查询。仅使用Spark SQL,耗时能够降低至150秒,而加上Alluxio后,耗时能够进一步降低至约20秒。该查询运行速度提高了50倍,并满足了我们为项目设置的交互式查询要求。因此,通过使用Alluxio,能够将执行耗时为15分钟的批量查询转换为耗时不到30秒的交互式查询。

在过去的一年中,该系统已部署在一个拥有100多个节点的集群中,Alluxio系统存储管理了超过2 PB数据并且使用了Alluxio高级功能——分层存储。此功能允许我们将内存作为一级存储,SSD作为二级存储,HDD作为最后级存储。将这些存储介质组合在一起,我们可以提供超过2 PB的存储空间。

除了查询性能方面的改进之外,对我们来说更重要的是整个系统的可靠性。在过去的一年中,Alluxio一直在我们的数据基础设施中稳定运行,很少遇到问题,这给了我们很多信心。因此,我们正在准备大规模部署Alluxio。首先,我们通过部署拥有1000Alluxio worker节点的集群来验证Alluxio的可扩展性。在过去的一个月里,这个拥有1000Alluxio worker节点的集群一直运行稳定,该集群提供超过50 TB的内存空间。据我们所知,这是目前世界上最大的Alluxio集群之一。


总结

我们已经验证了Alluxio能够极大地提高性能,并且可靠可扩展。接下来,我们正在逐步将不同的百度工作负载任务迁移到Alluxio集群上。例如,为了提高在线图像服务和在线图像分析的性能,我们正在与Alluxio社区密切合作,试图在Alluxio之上开发一个高性能的Key-Value存储。这样,只需要Alluxio一个存储系统:Key-Value存储可以执行有效的在线服务;对于离线分析,我们可以直接访问Alluxio获取图像数据。这大大降低了我们的开发和运营成本。

作为Alluxio的早期使用者,我们验证了它所描述的以内存为中心的分布式存储系统,以内存速度跨集群框架实现可靠的数据共享。除了可靠且具有内存速度之外, Alluxio还提供了一种基于内存的扩展存储以提供足够存储容量。

640?wx_fmt=png

这篇关于百度案例:使用Alluxio提速数据查询30倍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/169905

相关文章

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

mysql表操作与查询功能详解

《mysql表操作与查询功能详解》本文系统讲解MySQL表操作与查询,涵盖创建、修改、复制表语法,基本查询结构及WHERE、GROUPBY等子句,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随... 目录01.表的操作1.1表操作概览1.2创建表1.3修改表1.4复制表02.基本查询操作2.1 SE

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的