首页 理论教育 Spark架构思路及应用

Spark架构思路及应用

时间:2023-10-17 理论教育 版权反馈
【摘要】:为应对这一挑战,很多项目都采用混合架构形式,称为Lambda Architure。而速度层则采用分布式的流处理平台Spark Streaming,作为批量处理层高延迟响应的补充,可实时计算数据完成查询处理。如下为分解目标:图4-9Hadoop+Spark混合架构分解得到的用户兴趣矩阵U和项目主题矩阵V均存储在HDFS上,此时再通知服务层更新用户兴趣索引和主题特征索引。

Spark架构思路及应用

为应对这一挑战,很多项目都采用混合架构形式,称为Lambda Architure。Lambda Architecture针对于混合多样的数据场景(既需要批量处理,又需要实时或流数据处理)提供了一系列清晰的架构设计原则,其主要分为三个层次:批量处理层(Batch Layer)、服务层(Serving Layer),以及速度层(Speed Layer),如图4-8所示。

在批量处理层,一般选用当前成熟的计算和存储平台Hadoop,一方面HDFS可以用来存储大容量的数据集,另一方面可以依靠MapReduce灵活的计算扩展功能,再结合多轮迭代完成各种形式的计算。同时,也可以使用Spark完成批量处理计算任务,其基于内存的特点使得它更适合于大量迭代的机器学习和复杂数据处理,而且在Spark平台上开发的GraphX(图计算框架)和Mllid(机器学习库)都可以直接用于批量的数据分析,极大地方便了应用程序的开发和维护。由于用户的长期兴趣一般很稳定,每次参与计算的都是完整数据集,因此在设计实现中,对批量处理层模型的更新不会很频繁。

服务层则可以利用Shark(Hive on Spark)等索引服务针对批量处理层的结果进行索引,接收外部ad-hoc查询请求,完成准实时的SQL查询任务。而速度层则采用分布式的流处理平台Spark Streaming,作为批量处理层高延迟响应的补充,可实时计算数据完成查询处理。在Spark-Streaming中,随着新数据的到来,基于内存的计算任务会被划分成固定时间间隔的窗口抽象,称为Discretized Stream。与Spark提供的RDD抽象类似,DStream也提供了丰富的函数式编程接口(如map、flatMap、reduce、join等),用于完成复杂多样的操作任务,同时还可以调用Spark平台上的操作,如RDD、GraphX和Mllib库等。

图4-8 Lambda架构实例

在批量处理层等待数据的积累,间隔地启动批量任务存储在HDFS上,并通知服务层Impala快速更新索引,而速度层则可以在内存中快速更新。一个新数据的到来,需要同时发送至批量处理层和速度层,服务层会通过建立的索引完成低延迟的数据查询,在速度层通过实时查询直接返回结果,最终将两者的查询合并返回最终的输出结果。(www.xing528.com)

举例来说,针对电子商务网站的推荐任务,系统一方面需要分析当前用户的历史偏好,另一方面根据当前用户的浏览和点击行为反馈产生实时推荐。首先,在固定的某个时间,批量处理层Hadoop或Spark将分析当前收集的所有历史数据,通过对当前历史记录的大规模用户反馈矩阵进行矩阵分解,得到推荐系统的用户和项目模型。如下为分解目标:

图4-9 Hadoop+Spark混合架构

分解得到的用户兴趣矩阵U和项目主题矩阵V均存储在HDFS上,此时再通知服务层更新用户兴趣索引和主题特征索引。当用户浏览网站,产生浏览商品、点击链接和搜索商品等反馈时,系统会将这些数据快速收集分别存入批量处理层和速度层,此时批量处理层还处于数据积累阶段,而速度层则可以快速在内存中在线更新分解模型,并给出新的商品推荐列表,返回至网站推荐页面上。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈