百度案例:使用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

相关文章

批量导入txt数据到的redis过程

《批量导入txt数据到的redis过程》用户通过将Redis命令逐行写入txt文件,利用管道模式运行客户端,成功执行批量删除以Product*匹配的Key操作,提高了数据清理效率... 目录批量导入txt数据到Redisjs把redis命令按一条 一行写到txt中管道命令运行redis客户端成功了批量删除k

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

Oracle查询表结构建表语句索引等方式

《Oracle查询表结构建表语句索引等方式》使用USER_TAB_COLUMNS查询表结构可避免系统隐藏字段(如LISTUSER的CLOB与VARCHAR2同名字段),这些字段可能为dbms_lob.... 目录oracle查询表结构建表语句索引1.用“USER_TAB_COLUMNS”查询表结构2.用“a

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.