Spark表明着下一代大数据处理技术,而且,借着开源算法和计算节点集群分布式处理,Spark和Hadoop在执行的方式和速度已经远远的超过传统单节点的技术架构。但Spark利用内存进行数据处理,这让Spark的处理速度超过基于磁盘的Hadoop 100x 倍。
但Spark和内存数据库Redis结合后可显著的提升Spark运行任务的性能,这源于Redis优秀的数据结构和执行过程,从而减少数据处理的复杂性和开销。Spark经过一个Redis链接器能够访问Redis的数据和API,加速Spark处理数据。
Spark和Redis结合使用到底有多大的性能提高呢?结合这二者来处理时序数据时能够提升46倍以上——而不是提升百分之四十五。
为何这些数据处理速度的提高是很重要的呢?如今,愈来愈多的公司指望在交易完成的同时完成对应的数据分析。公司的决策也须要自动化,而这些须要数据分析可以实时的进行。Spark是一个用的较多的数据处理框架,但它不能作到百分之百实时,要想作到实时处理Spark还有很大一步工做须要作
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)大小排序的元素集合。
Redis能存储多种数据类型,并自动的以评分(score)排序。常见的例子有,按价格排序的商品,以阅读数排序的文章名,股票价格时序数据,带时间戳的传感器读数。
有序集合依赖Redis优秀的内建操做能够实现范围查询、求交集,能够很是快地(O(log(N)))完成添加,删除和更新元素的操做。Redis内建函数不只减小代码开发,在内存中执行也减少了网络延时和带宽消耗,可达到亚毫秒级的吞吐延迟。特别地,对时序数据集合来说,有序集合数据结构比使用内存键值对或使用磁盘的数据库,能给数据分析带来数量级上的性能提高。
Spark-Redis connector
为了提升Spark数据分析的能力,Redis团队开发了一个Spark-Redis connector,它使得Spark能够直接使用Redis做为数据源,瓜熟蒂落的Spark也能使用Redis的各数据结构,进而显著的提高Spark分析数据的速度。算法
为了展现Spark结合Redis所产生的效果,Redis团队拿时序数据集合作基准测试,测试了Spark在不一样状况下执行时间范围查询:Spark使用堆外内存;Spark使用Tachyon做为堆外缓存;Spark使用HDFS存储;Spark结合Redis使用。
Redis团队改进了Cloudera的Spark分析时序数据的包,采用Redis有序集合数据结构加速时序数据分析,而且实现Spark访问Redis各种数据结构的接口。此Spark-Redis时序开发包主要作了两件事:
它让Redis节点与Spark集群的节点自动匹配,确保每一个Spark节点都使用本地Redis节点,这样能够明显的优化延迟时间;
集成Spark DataFrame和Spark读取数据源,使得Spark SQL查询可自动转化,并能借助Redis能有效的恢复数据。
换句话说,使用Spark-Redis时序开发包意味着用户无需担忧Spark和Redis二者如何使用。用户使用Spark SQL进行数据分析能够得到极大的查询性能提高。
基准测试
基准测试的时序数据集是跨度32年的1024个股票交易市场按天随机生成的数据。每一个股票交易所都有有序数据集,以日期和元素属性(开盘价、最高价、最低价、收盘价等)排序,在Redis中以有序数据结构存储,采用Spark进行数据分析,描述如图4.
在上述列子中,就有序集合AAPL来看,有序数据集合以天为评分(score,以蓝色表示),天天相关的值为一行(Member,以灰色表示)。在Redis中,只要执行一个ZRANGEBYSCORE操做就能够获取一个指定时间范围内的全部股票数据,而且Redis执行此查询要比其余Key/Value数据库快100倍。
横向比较各类状况的基准测试,Spark结合Redis执行时间片的查询速度比Spark使用HDFS快135倍、比Spark使用堆内内存或Spark使用Tachyon做为堆外内存要快45倍。
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的共享。
数据库