写点什么

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:316666
用户头像

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

关注

评论

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

科技向善,真的吗?

算法的秘密

AI制作PPT工具有哪些?10款AI生成PPT软件盘点推荐!

彭宏豪95

职场 PPT PPT模板 办公软件 AIGC

Java 日期和时间 API:实用技巧与示例 - 轻松处理日期和时间

小万哥

Java 程序人生 编程语言 软件工程 后端开发

AI板块的io.net 为什么值得关注?

币离海

AI IO.NET

创新技术应用:视觉CV处理在UI自动化测试中的实际应用探索

测吧(北京)科技有限公司

测试

ETL与抖音数据同步,让数据流动无阻

RestCloud

数据同步 ETL 数据集成

龙蜥社区成立系统安全 SIG,助力系统安全生态

OpenAnolis小助手

开源 操作系统 系统安全 龙蜥社区 sig

软件测试学习笔记丨性能测试体系

测试人

软件测试

常用的数据分析方法和工具有哪些?

悦数图数据库

图数据库

如何提高项目成功率?分享20 种项目管理工具、技术和软件

爱吃小舅的鱼

项目管理 项目管理软件

一文读懂 Databend 的开放表格式引擎

Databend

合伙/雇佣/灵活用工,供需双方该如何选择呢?

凌晞

灵活用工 人力资源规划

缓存有大key?你得知道的一些手段

京东零售技术

Java 缓存 后端

一键打通红圈泛微,让协同办公更轻松!

聚道云软件连接器

案例分享

加速大模型落地:火山引擎向量数据库的实践应用

字节跳动云原生计算

大模型 向量数据库 混合搜索

软件测试学习笔记丨性能测试工具JMeter — 安装和录制回放

测试人

软件测试 性能测试 自动化测试 测试开发

从智慧PC到千行百业:在华为擎云 G540中找到新质生产力

脑极体

AI PC

好用工具清单——ver1.1

充实的orzi

工具 实用工具

体育赛事直播平台的进入壁垒与成本结构分析

软件开发-梦幻运营部

自定义对象池实践

FunTester

可观测性十大场景 | 关于保险行业开门红期间应用性能的端到端全栈可观测

博睿数据

百度智能云专有云 ABC Stack 平台通过一云多芯认证,为用户构建全栈国产化云平台

Baidu AICLOUD

专有云 一云多芯

Frappe下解决Socket.io 的问题

麦兜

汽车制造业PMC组态应用最佳实践

图扑物联

CC攻击对网站的影响

德迅云安全杨德俊

技术管理者如何避免被裁掉(3)

芃篙君

管理

104 Connection reset by peer

麦兜

数据解读乡村发展!专家详解 2024 年(第 17 届)中国大学生计算机设计大赛大数据主题赛赛题

ModelWhale

大数据 数据分析 交叉学科 中国大学生计算机设计大赛 新文科

国内鞋服品牌如何打造出优衣库的“零库存”运营体系

第七在线

架构实战营-模块一作业

满心

架构实战营

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