【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

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

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

关注

评论

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

阿里云蝉联 Forrester FaaS 领导者象限丨云原生 7 月产品技术动态

阿里巴巴云原生

阿里云 云原生

生成式AI:开启全新的智能时代

百度开发者中心

人工智能 文心一言

生成式AI:重新定义生产力

百度开发者中心

人工智能 文心一言

LeetCode题解:2625. 扁平化嵌套数组,递归

Lee Chen

JavaScript LeetCode

Vue 框架提升加载速度的优化思路

Onegun

Vue React

关于 LLM 和图数据库、知识图谱的那些事

NebulaGraph

图数据库 知识图谱 LLM

低代码没有存在感?看看最新的赛道战况!

这我可不懂

零代码 系统开发 低代码开发 传统开发

重新定义物化视图,你必须拥有的极速湖仓神器!

StarRocks

数据库 数据仓库 StarRocks 湖仓一体 物化视图

Typora for Mac(Markdown文本编辑器) 1.6.7中文版

mac

Typora markdown编辑器 苹果mac Windows软件下载

生成式AI:模拟人类智能的未来科技

百度开发者中心

人工智能 文心一言

mac电脑版Visio绘图文件阅读器 VSD Viewer for Mac

胖墩儿不胖y

Mac 软件推荐 Mac 软件

软件测试/测试开发丨Python 常用第三方库 pymysql

测试人

Python MySQL 程序员 软件测试 测试开发

Microsoft Office 2019 for Mac中文正式版下载v16.76

mac

office办公软件 Office 2019 苹果mac Windows软件下载

4 招搞定 Java List 排序

SoFlu软件机器人

生成式AI助力技术文章撰写

百度开发者中心

人工智能 大模型

生成式AI:文本智能的未来发展方向

百度开发者中心

人工智能 文心一言

版本发布|Orillusion 0.6.7版本发布啦!

Orillusion

开源 渲染引擎 元宇宙 webgpu AIGC

使用 Docker 部署 etcd、启用身份验证

向东是大海

etcd

在 Dify 轻松调用顶尖开源与国产模型,解锁不同模型的潜力

Dify

ChatGPT 文心一言 ChatGLM 讯飞星火 llama2

生成式AI助力小型企业发展

百度开发者中心

#人工智能 文心一言

哪些无用敏捷指标正在破坏敏捷转型?

敏捷开发

敏捷开发 敏捷转型 敏捷指标

智能化推送系统——APP出海营销的好帮手

MobTech袤博科技

前端开发 APP开发 前端开发工具 前端‘’

生成式AI助力企业高效创新

百度开发者中心

人工智能 文心一言

小灯塔系列-中小企业数字化转型系列研究——电子签名测评报告

向量智库

一文了解Vue的优点,低代码平台的前端框架采用Vue的好处有哪些?

互联网工科生

Vue 低代码 应用开发 JNPF

商密大会传捷报|海泰方圆喜获首届“熵密杯”密码应用安全竞赛优胜奖

电子信息发烧客

Sketch for mac(矢量绘图UI设计软件) 97.2中文特别版

mac

Sketch 苹果mac Windows软件 矢量图设计软件

生成式AI:2023产业机遇与落地场景探索

百度开发者中心

人工智能 百度文心一言

Spring BeanDefinition 也分父子关系?

江南一点雨

Java spring

一文吃透低代码开发平台

高端章鱼哥

系统架构 低代码 应用开发 JNPF

活动预告|诚邀您参加HICOOL2023全球创业者峰会澜舟科技产品发布会

澜舟孟子开源社区

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