【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

45 倍加速 Spark 的处理效率?!

  • 2016-04-12
  • 本文字数:2504 字

    阅读完需:约 8 分钟

Spark 代表着下一代大数据处理技术,并且,借着开源算法和计算节点集群分布式处理,Spark 和 Hadoop 在执行的方式和速度已经远远的超过传统单节点的技术架构。但 Spark 利用内存进行数据处理,这让 Spark 的处理速度超过基于磁盘的 Hadoop 100x 倍。

但 Spark 和内存数据库 Redis 结合后可显著的提高 Spark 运行任务的性能,这源于 Redis 优秀的数据结构和执行过程,从而减小数据处理的复杂性和开销。Spark 通过一个 Redis 连接器可以访问 Redis 的数据和 API,加速 Spark 处理数据。

Spark 和 Redis 结合使用到底有多大的性能提升呢?结合这两者来处理时序数据时可以提高 46 倍以上——而不是提高百分之四十五。

为什么这些数据处理速度的提升是很重要的呢?现在,越来越多的公司期望在交易完成的同时完成对应的数据分析。公司的决策也需要自动化,而这些需要数据分析能够实时的进行。Spark 是一个用的较多的数据处理框架,但它不能做到百分之百实时,要想做到实时处理 Spark 还有很大一步工作需要做

图 1

Spark RDD

Spark 采用弹性分布式数据集(RDD),可将数据存在易变的内存中或持久化到磁盘上。 RDD 具有不可变化性,分布式存储在 Spark 集群的各节点,RDD 经过 tansform 操作后创建出一个新的 RDD。RDD 是 Spark 中数据集的一种重要抽象,具有良好的容错性、高效的迭代处理。

Redis

Redis 天生为高性能设计,通过良好的数据存储结构能达到亚毫秒级的延迟。Redis 的数据存储结构不仅仅提高内存的利用和减小应用的复杂性,也降低了网络负载、带宽消耗和处理时间。Redis 数据结构包括字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets), bitmaps, hyperloglogs 和 地理空间(geospatial)索引半径查询。

下面来展示 Redis 的数据结构如何来简化应用的处理时间和复杂度。这里用有序集合来举例,一个以评分(score)大小排序的元素集合。

图 2

Redis 能存储多种数据类型,并自动的以评分(score)排序。常见的例子有,按价格排序的商品,以阅读数排序的文章名,股票价格时序数据,带时间戳的传感器读数。
有序集合依赖 Redis 优秀的内建操作可以实现范围查询、求交集,可以非常快地(O(log(N)))完成添加,删除和更新元素的操作。Redis 内建函数不仅减少代码开发,在内存中执行也减小了网络延时和带宽消耗,可达到亚毫秒级的吞吐延迟。特别地,对时序数据集合来讲,有序集合数据结构比使用内存键值对或使用磁盘的数据库,能给数据分析带来数量级上的性能提升。

Spark-Redis connector

为了提高 Spark 数据分析的能力,Redis 团队开发了一个 Spark-Redis connector ,它使得 Spark 可以直接使用 Redis 作为数据源,顺理成章的 Spark 也能使用 Redis 的各数据结构,进而显著的提升 Spark 分析数据的速度。

图 3

为了展示 Spark 结合 Redis 所产生的效果,Redis 团队拿时序数据集合做基准测试,测试了 Spark 在不同情况下执行时间范围查询:Spark 使用堆外内存;Spark 使用 Tachyon 作为堆外缓存;Spark 使用 HDFS 存储;Spark 结合 Redis 使用。

Redis 团队改进了 Cloudera 的 Spark 分析时序数据的包,采用 Redis 有序集合数据结构加速时序数据分析,并且实现 Spark 访问 Redis 各类数据结构的接口。此 Spark-Redis 时序开发包主要做了两件事:

  1. 它让 Redis 节点与 Spark 集群的节点自动匹配,确保每个 Spark 节点都使用本地 Redis 节点,这样可以明显的优化延迟时间;
  2. 集成 Spark DataFrame 和 Spark 读取数据源,使得 Spark SQL 查询可自动转化,并能借助 Redis 能有效的恢复数据。

换句话说,使用 Spark-Redis 时序开发包意味着用户无需担心 Spark 和 Redis 两者如何使用。用户使用 Spark SQL 进行数据分析可以获得极大的查询性能提升。

基准测试

基准测试的时序数据集是跨度 32 年的 1024 个股票交易市场按天随机生成的数据。每个股票交易所都有有序数据集,以日期和元素属性(开盘价、最高价、最低价、收盘价等)排序,在 Redis 中以有序数据结构存储,采用 Spark 进行数据分析,描述如图 4.

图 4

在上述列子中,就有序集合 AAPL 来看,有序数据集合以天为评分(score,以蓝色表示),每天相关的值为一行(Member,以灰色表示)。在 Redis 中,只要执行一个 ZRANGEBYSCORE 操作就可以获取一个指定时间范围内的所有股票数据,并且 Redis 执行此查询要比其他 Key/Value 数据库快 100 倍。
从图 x 可以看到,横向比较各种情况的基准测试,Spark 结合 Redis 执行时间片的查询速度比 Spark 使用 HDFS 快 135 倍、比 Spark 使用堆内内存或 Spark 使用 Tachyon 作为堆外内存要快 45 倍。

图 5

Spark-Redis 其它应用

按照“ Getting Started with Spark and Redis ”指南,你可以一步步安装 Spark 集群和使用 Spark-Redis 包。它提供一个简单的 wordcount 的例子展示如何使用 Spark 结合 Redis。待你熟练使用后可以自己进一步挖掘、优化其他的 Redis 数据结构。
Redis 的有序集合数据结构很适合时序数据集合,而 Redis 其他数据结构(比如,列表(lists), 集合(sets)和 地理空间(geospatial)索引半径查询)也能进一步丰富 Spark 的数据分析。当使用 Spark 抽取地理空间信息来获取新产品的人群偏好和邻近中心的位置,可结合 Redis 的地理空间(geospatial)索引半径查询来优化。

Spark 支持一系列的数据分析,包括 SQL、机器学习、图计算和流式数据。Spark 本身的内存数据处理能力有一定的限制,而借着 Redis 可以让 Spark 更快的做数据分析。其实 Spark 的 DataFrame 和 Datasets 已经在做类似的优化,先把数据进行结构化放在内存里进行计算,并且 Datasets 可以省掉序列化和反序列化的消耗。结合 Spark 和 Redis,借助 Redis 的共享分布式内存数据存储机制,可以处理数百万个记录乃至上亿的记录

时序数据的分析仅仅是一个开始,更多的性能优化可以参见: Spark-Redis

作者介绍

侠天,专注于大数据、机器学习和数学相关的内容,并有个人公众号:bigdata_ny 分享相关技术文章。 - - - - - -

感谢杜小芳对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-04-12 17:316478
用户头像

发布了 43 篇内容, 共 27.6 次阅读, 收获喜欢 7 次。

关注

评论

发布
暂无评论
发现更多内容

Vue进阶(幺柒伍):色彩搭配

No Silver Bullet

Vue 11月日更

Spring MVC框架:第七章:REST架构风格(1)

Java 程序员 后端

Spring MVC温故而知新 – 从零开始

Java 程序员 后端

Spring(一):容器的实现——两大核心类

Java 程序员 后端

Spring Boot 接入 GitHub 第三方登录,只要两行配置!

Java 程序员 后端

Spring Boot 操作 Redis 的各种实现

Java 程序员 后端

Spring Boot在微服务中的最佳实践

Java 程序员 后端

Spring MVC框架:第六章:传统增删改查

Java 程序员 后端

Go WebSocket开发与测试实践【/net/websocket】

FunTester

Java websocket 接口测试 Go 语言 FunTester

Spring--基于AOP实现事务控制

Java 程序员 后端

从环境搭建到回归神经网络案例,带你掌握Keras

华为云开发者联盟

Python 神经网络 tensorflow keras 回归神经网络

Spring Boot 实战(11)整合MyBatis-Plus

Java 程序员 后端

Spring Boot+Mybatis+thymeleaf整合

Java 程序员 后端

Spring Cloud 2020 版本最佳实践,你落伍了

Java 程序员 后端

Spring Cloud Gateway修改请求和响应body的内容

Java 程序员 后端

【LeetCode】合并两个有序数组Java题解

Albert

算法 LeetCode 11月日更

Spring 三级缓存和循环依赖 思考和总结

Java 程序员 后端

Spring+SpringMVC+Mybatis框架整合(SSM整合)

Java 程序员 后端

来,带你一次性搞懂数据分析和数据挖掘!

博文视点Broadview

Spring5 框架新功能(Webflux)

Java 程序员 后端

Spring Boot 集成 Elasticsearch 实战

Java 程序员 后端

Spring Cloud Gateway限流实战

Java 程序员 后端

Spring Cloud:第二章:eureka服务发现

Java 程序员 后端

Spring Boot 核心的 25 个注解

Java 程序员 后端

fastposter 2.2.0 新版本发布 电商级海报生成器

物有本末

Java Vue 海报 fastposter 海报生成器

Spring MVC框架:第七章:REST架构风格

Java 程序员 后端

Spring Boot 快速入门(一)

Java 程序员 后端

外包学生管理系统详细架构设计文档

Beyond Ryan

spring-bean的理解

Java 程序员 后端

Spring--基于IOC的CRUD操作

Java 程序员 后端

spring-cloud-kubernetes背后的三个关键知识点

Java 程序员 后端

45倍加速Spark的处理效率?!_语言 & 开发_侠天_InfoQ精选文章