本文转自http://www.csdn.net/article/2014-11-04/2822474,所有权力归原作者所有。虽然本文并没有讲什么实质的东西,但是可以拿来吹牛逼呀~ ⁽⁽ଘ( ˊᵕˋ )ଓ⁾⁾*
allowtransparency="true" frameborder="0" scrolling="no" src="http://hits.sinajs.cn/A1/weiboshare.html?url=http%3A%2F%2Fwww.csdn.net%2Farticle%2F2014-11-04%2F2822474&type=3&count=&appkey=&title=%E6%9C%AC%E6%96%87%E5%B0%86%E4%BB%8B%E7%BB%8D%E5%9F%BA%E4%BA%8E%E7%89%A9%E5%93%81%E7%9A%84%E5%8D%8F%E5%90%8C%E8%BF%87%E6%BB%A4%E6%8E%A8%E8%8D%90%E7%AE%97%E6%B3%95%E6%A1%88%E4%BE%8B%E5%9C%A8TDW%20Spark%E4%B8%8EMapReudce%E4%B8%8A%E7%9A%84%E5%AE%9E%E7%8E%B0%E5%AF%B9%E6%AF%94%EF%BC%8C%E7%9B%B8%E6%AF%94%E4%BA%8EMapReduce%EF%BC%8CTDW%20Spark%E6%89%A7%E8%A1%8C%E6%97%B6%E9%97%B4%E5%87%8F%E5%B0%91%E4%BA%8666%25%EF%BC%8C%E8%AE%A1%E7%AE%97%E6%88%90%E6%9C%AC%E9%99%8D%E4%BD%8E%E4%BA%8640%25%E3%80%82&pic=&ralateUid=&language=zh_cn&rnd=1458437350395" width="22" height="16">摘要:本文将介绍基于物品的协同过滤推荐算法案例在TDW Spark与MapReudce上的实现对比,相比于MapReduce,TDW Spark执行时间减少了66%,计算成本降低了40%。

MapReduce为大数据挖掘提供了有力的支持,但是复杂的挖掘算法往往需要多个MapReduce作业才能完成,多个作业之间存在着冗余的磁盘读写开销和多次资源申请过程,使得基于MapReduce的算法实现存在严重的性能问题。后起之秀Spark得益于其在迭代计算和内存计算上的优势,可以自动调度复杂的计算任务,避免中间结果的磁盘读写和资源申请过程,非常适合数据挖掘算法。腾讯TDW Spark平台基于社区最新Spark版本进行深度改造,在性能、稳定和规模方面都得到了极大的提高,为大数据挖掘任务提供了有力的支持。

本文将介绍基于物品的协同过滤推荐算法案例在TDW Spark与MapReudce上的实现对比,相比于MapReduce,TDW Spark执行时间减少了66%,计算成本降低了40%。

算法介绍

互联网的发展导致了信息爆炸。面对海量的信息,如何对信息进行刷选和过滤,将用户最关注最感兴趣的信息展现在用户面前,已经成为了一个亟待解决的问题。推荐系统可以通过用户与信息之间的联系,一方面帮助用户获取有用的信息,另一方面又能让信息展现在对其感兴趣的用户面前,实现了信息提供商与用户的双赢。

协同过滤推荐(Collaborative Filtering Recommendation)算法是最经典最常用的推荐算法,算法通过分析用户兴趣,在用户群中找到指定用户的相似用户,综合这些相似用户对某一信息的评价,形成系统对该指定用户对此信息的喜好程度预测。协同过滤可细分为以下三种:

  • User-based CF: 基于User的协同过滤,通过不同用户对Item的评分来评测用户之间的相似性,根据用户之间的相似性做出推荐;
  • Item-based CF: 基于Item的协同过滤,通过用户对不同Item的评分来评测Item之间的相似性,根据Item之间的相似性做出推荐;
  • Model-based CF: 以模型为基础的协同过滤(Model-based Collaborative Filtering)是先用历史资料得到一个模型,再用此模型进行预测推荐。

问题描述

输入数据格式:Uid,ItemId,Rating (用户Uid对ItemId的评分)。

输出数据:每个ItemId相似性最高的前N个ItemId。

由于篇幅限制,这里我们只选择基于Item的协同过滤算法解决这个例子。

算法逻辑

基于Item的协同过滤算法的基本假设为两个相似的Item获得同一个用户的好评的可能性较高。因此,该算法首先计算用户对物品的喜好程度,然后根据用户的喜好计算Item之间的相似度,最后找出与每个Item最相似的前N个Item。该算法的详细描述如下:

  • 计算用户喜好:不同用户对Item的评分数值可能相差较大,因此需要先对每个用户的评分做二元化处理,例如对于某一用户对某一Item的评分大于其给出的平均评分则标记为好评1,否则为差评0。
  • 计算Item相似性:采用Jaccard系数作为计算两个Item的相似性方法。狭义Jaccard相似度适合计算两个集合之间的相似程度,计算方法为两个集合的交集除以其并集,具体的分为以下三步。

1)  Item好评数统计,统计每个Item的好评用户数。
2)  Item好评键值对统计,统计任意两个有关联Item的相同好评用户数。
3)  Item相似性计算,计算任意两个有关联Item的相似度。

  • 找出最相似的前N个Item。这一步中,Item的相似度还需要归一化后整合,然后求出每个Item最相似的前N个Item,具体的分为以下三步。

1)  Item相似性归一化。
2)  Item相似性评分整合。
3)  获取每个Item相似性最高的前N个Item。

基于MapReduce的实现方案

使用MapReduce编程模型需要为每一步实现一个MapReduce作业,一共存在包含七个MapRduce作业。每个MapReduce作业都包含Map和Reduce,其中Map从HDFS读取数,输出数据通过Shuffle把键值对发送到Reduce,Reduce阶段以<key,Iterator<value>>作为输入,输出经过处理的键值对到HDFS。其运行原理如图1 所示。


图1

七个MapReduce作业意味着需要七次读取和写入HDFS,而它们的输入输出数据存在关联,七个作业输入输出数据关系如图2所示。


图2

基于MapReduce实现此算法存在以下问题:

  • 为了实现一个业务逻辑需要使用七个MapReduce作业,七个作业间的数据交换通过HDFS完成,增加了网络和磁盘的开销。
  • 七个作业都需要分别调度到集群中运行,增加了Gaia集群的资源调度开销。
  • MR2和MR3重复读取相同的数据,造成冗余的HDFS读写开销。

这些问题导致作业运行时间大大增长,作业成本增加。

基于Spark的实现方案

相比与MapReduce编程模型,Spark提供了更加灵活的DAG(Directed Acyclic Graph) 编程模型, 不仅包含传统的map、reduce接口, 还增加了filter、flatMap、union等操作接口,使得编写Spark程序更加灵活方便。使用Spark编程接口实现上述的业务逻辑如图3所示。

图3

相对于MapReduce,Spark在以下方面优化了作业的执行时间和资源使用。

效果对比

测试使用相同规模的资源,其中MapReduce方式包含200个Map和100个Reduce,每个Map和Reduce配置4G的内存; 由于Spark不再需要Reduce资源, 而MapReduce主要逻辑和资源消耗在Map端,因此使用200和400个Executor做测试,每个Executor包含4G内存。测试结果如下表所示,其中输入记录约38亿条。

运行模式

计算资源

运行时间(min)

成本(Slot*秒)

MapReduce

200 Map+100 Reduce(4G)

120

693872

Spark

200 Executor(4G)

33

396000

Spark

400 Executor(4G)

21

504000

对比结果表的第一行和第二行,Spark运行效率和成本相对于MapReduce方式减少非常明显,其中,DAG模型减少了70%的HDFS读写、cache减少重复数据的读取,这两个优化即能减少作业运行时间又能降低成本;而资源调度次数的减少能提高作业的运行效率。

对比结果表的第二行和第三行,增加一倍的Executor数目,作业运行时间减少约50%,成本增加约25%,从这个结果看到,增加Executor资源能有效的减少作业的运行时间,但并没有做到完全线性增加。这是因为每个Task的运行时间并不是完全相等的, 例如某些task处理的数据量比其他task多;这可能导致Stage的最后时刻某些Task未结束而无法启动下一个Stage,另一方面作业是一直占有Executor的,这时候会出现一些Executor空闲的状况,于是导致了成本的增加。

小结

数据挖掘类业务大多具有复杂的处理逻辑,传统的MapReduce/Pig类框架在应对此类数据处理任务时存在着严重的性能问题。针对这些任务,如果利用Spark的迭代计算和内存计算优势,将会大幅降低运行时间和计算成本。TDW目前已经维护了千台规模的Spark集群,并且会在资源利用率、稳定性和易用性等方面做进一步的提升和改进,为业务提供更有利的支持。

Spark vs. MapReduce 时间节约66%,计算节约40%相关推荐

  1. Spark Streaming高级特性在NDCG计算实践

    从storm到spark streaming,再到flink,流式计算得到长足发展, 依托于spark平台的spark streaming走出了一条自己的路,其借鉴了spark批处理架构,通过批处理方 ...

  2. iOS学习笔记37 时间和日期计算

    ###一.时间和日期计算 我们在应用开发中,时常需要和时间打交道,比如获取当前时间,获取两个时间点相隔的时间等等,在iOS开发中与时间相关的类有如下几个: NSDate:表示一个绝对的时间点 NSTi ...

  3. spark原理和spark与mapreduce的最大区别

    参考文档:https://files.cnblogs.com/files/han-guang-xue/spark1.pdf 参考网址:https://www.cnblogs.com/wangrd/p/ ...

  4. StructedStreaming-基于事件时间的窗口计算

    时间分类 事件时间:事件产生的时间 摄入时间:事件到达流系统的时间 处理时间:事件被流系统处理的时间 注:在实际开发中一般都要基于事件时间进行窗口计算,因为事件时间更能代表事件的本质. 例如:2021 ...

  5. boost::posix_time模块用时间构造和计算的一些简单例子

    boost::posix_time模块用时间构造和计算的一些简单例子 实现功能 C++实现代码 实现功能 boost::posix_time模块用时间构造和计算的一些简单例子 C++实现代码 #inc ...

  6. 《ERP高级计划》书解读-APS案例分析之五时间点的计算(蔡颖)(转)

    <ERP高级计划>书解读-APS案例分析之五时间点的计算(蔡颖) http://www.amteam.org/k/Board/2004-12/0/486467.html 时间点的计算的内容 ...

  7. 如何用python处理excel中时间重合_python读取Excel文件中的时间,并计算时间间隔...

    以此Excel文件为例: 1.python读取Excel文件中的时间 import xlrd #读取Excel文件 workbook = xlrd.open_workbook('C:/Users/12 ...

  8. 著作权保护期起止时间是怎么计算的

    一.著作权保护期起止时间是怎么计算的 1.不同的权利,著作权保护期限起止时间是不一样的: (1)作者的署名权.修改权.保护作品完整权的保护期不受限制. (2)自然人的作品,其发表权.著作权法第十条第一 ...

  9. Hive实现时间滑动窗口计算

    Hive实现时间滑动窗口计算 时间滑动计算 外部调用实现时间循环 自关联实现滑动时间窗口 扩展基于自然周的的滚动时间窗口计算 总结 时间滑动计算 需求大致是这样的,我们有一个业务涉及到用户打卡,用户可 ...

最新文章

  1. pytorch自定义数据集DataLoder
  2. 图论--网络流--最大流 洛谷P4722(hlpp)
  3. eclipse 跑maven命令_eclipse中运行maven命令没有反应,console也不出现信息
  4. html get请求_99% 的人都理解错了 HTTP 中 GET 与 POST 的区别【面试必问】
  5. UE4的MaterialInstance作用
  6. postgresql数据库的 to_date 和 to_timestamp 将 字符串转换为时间格式
  7. MATLAB偏振光的反射与折射,仿真程序动画作品--光的反射与折射*
  8. Double类型比较大小
  9. 【深度优先搜索】牛客网:剪绳子
  10. 从毕业生到高级工程师:三位腾讯高级程序员的感悟
  11. IAR 设置程序下载地址
  12. qq文件未上传至平台服务器,QQ传送离线文件慢是什么原因?原因及处理方法
  13. mysql benchmark tool_使用MYSQL benchmark - DBT2 Benchmark Tool遇到的问题
  14. 由淘宝鼠标经过显示头像想起的 定位分析
  15. postgres数据库表空间收缩之pg_squeeze,pg_repack
  16. 树莓派的ssh连接配置
  17. Machine Learning in Action 读书笔记---第3章 决策树
  18. php ziparchive 损坏,通过ZipArchive php获取损坏或空拉链
  19. 图像融合(Image Fusion)简介
  20. How to deactive Virus scan via view IWFNDCCONFIG

热门文章

  1. Linux部署安装JDK
  2. sparkUI使用与扩展
  3. sybase数据库配置经验交流
  4. CCF201509-2 日期计算
  5. python 字符串替换换行,Python fstring:替换换行符/lineb
  6. 服务器centos安装mysql_centos下安装mysql服务器的方法
  7. 一条SQL语句的千回百转
  8. 如何优雅地添加MGR节点?
  9. 【推荐】 RAC 性能优化全攻略与经典案例剖析
  10. 线性表、顺序表和链表,你还分不清?