【Coursera课程笔记】Web智能和大数据Week3_MapReduce
本文目的
到今天为止,Coursera上的课程Web Intelligence and Big Data[5]已经上到Week 3(从0开始计数,实际上是4周)。前几周讲了一些机器学习的算法,如LHS,PageRank,朴素贝叶斯分类器等。但是光有这些算法还不够,特别是在当前这种海量数据(Big Data)盛行的年代。所以,Week 3就聊到了一种通用的大数据处理解决方法 ——Map Reduce(后面简称MR)。此方法最初来自Google的一篇论文[1],现在用来指代一种编程方式,主要作用与大规模数据集(通常在1T以上)的并行计算(很多算法都可以用MR方式实现)。本周课程主要内容介绍了MR的编程模型(结合Mincemeat[2]和Octopy[3]),运作原理和计算效率。在这里简单记录本周内容,作为备忘,对后面的工作会有帮助。
MapReduce编程方式
MR是一种编程模式。基于这种编程模式,可以有多种实现,鼎鼎大名的Hadoop就是其中之一。在MR的世界中,你只需要实现两个方法:map和reduce,剩下的所有事情交给MR框架,比如消息处理,中间数据存储,数据合并,容错等。
上千个廉价PC机并行处理,难免会出现服务器故障,至少出现一台服务器出错的概率为1-Pk,也就意味着随着机器数量K的增加,概率会趋近于1
Map函数的输入可以是任意序列,但输出必须是一个键值对{K,V},这一点很重要,因为MR框架会根据K,将不同K对应的V合并成一个列表,得到{K,V–List},然后将其作为reduce函数的输入,reduce的输出可以是任意数据。举个例子,有下列map和输出:
map1 –> {‘one’,1}, {‘two’,1}, {‘three’,1}
map2 –> {‘two’,1}, {‘world,1}
map3 –>{‘three,1}
那么经过合并后,得到中结果:
{‘one’, [1]}, {‘two’, [1,1]}, {‘three’, [1,1]}, {‘world’, [1]}
最后,MR框架会均匀的将上面的键值对分发给不同的Reduce函数。
由于Hadoop的环境搭建相对困难,如果想体验MR的编程方式,可以使用轻量级的MR框架Mincemeat[2](需要注意,在自定义map和reduce函数中,如果要引用外部函数或对象,需要在函数定义中import,否则会报错)或Octopy[3]。
Mincemeat代码学习
Mincemeat的源代码十分小,去掉注释,只有不到350行(是不是有点震精!)。但是麻雀虽小五脏俱全,具有MR的基本特性:
l 并行计算
l 容错
l 安全
Mincemeat运行原理
Mincemeat主要分两块:Server和Client。Server只有一个进程,用于调度,确保安全和执行容错的逻辑。Client就是真正做计算的进程(其他资料也称为Worker进程)。Mincemeat的网络通讯(Server与Client之间)采用的是Python内置的异步数据通讯框架asynchat(Python对本地Select和Poll的封装)。异步框架相对于多线程有个优点,不用处理线程间数据同步。这一点很重要,因为Mincemeat主要处理大数据并行计算,这样可以省去不少数据同步的开销。
Server启动后会监听端口11235,等待处理数据的Client进程。一旦有Client主动与Server连接,Server会与Client进行一些交互,大致如下,
1. 鉴权 根据预先设定的密码,确保次client的“合法性”
2. 传递方法 由于map,reduce和collect(可选)方法只在Server端定义,所以Server会将这些方法传递给Client。数据传递通过Python内置的marshal模块,对函数定义进行编码和解码。
3. Map阶段 Server会传递部分原始数据给Client并等待其处理结果。这里Mincemeat引入了collect环节,可以理解为一个mini reduce过程,其输入是一个局部的{K, V-List},该数据从当前Map处理的原始数据计算得到。
4. Reduce阶段 server会将map阶段的结果融合,然后将每一个{K,V -list}作为此阶段的输入
5. 结束 Server会将所有Reduce返回的结果合并,返回最后结果
Tips:Client可以在计算的任何时候(map阶段或reduce阶段均可以)加入计算,比如一开始只有1个Work计算,发现时间仍然很久,那么可以在其它计算机上启动client连接server,一起参与计算。或者,如果本机有多核,也可以同时启动多个进程,最大限度的利用多核计算能力。
Mincemeat有Client容错能力。重源代码中,不难发现在map阶段(reduce阶段类似),Mincemeat会标记每个Client处理的数据,标记使用原始输入的key。那么,Mincemeat就可以追踪每一块数据处理的状态,比如某个服务器宕机了,那么它当前处理的数据必然无法正确返回给Server,Server会在后面的某个时候将同样的数据分给其他的Client。但是没有Server容错,所以一旦Server挂掉,整个计算无法完成。
Mincemeat的优点和不足
个人能认为,Mincemeat适合MR学习和科学研究。如果使用在商业环境下会有下面的不足:1)没有Server容错,不稳定。2)计算结果放在内存中,所以一旦输出结果超过内存限制,那么Mincemeat无能为力。3)缺少自动化部署和执行client很局限,目前只能手动添加client,而且每个client的状态也不能事实显示。
虽然这样,我觉得Mincemeat还是很优秀的:1)比起同类的Octopy而言,效率要高很多;2)科研环境中,如果只做一两次MR并行计算,跑跑数据,写论文,整几台服务器,用Mincemeat跑跑成本还是很低的。3)简单,门槛低,为后面使用Hadoop等商业的MR框架打下基础。
MapReduce效率
MR框架会生成许多中间结果,这些中间结果的量级往往和输入数据相当,所以MR框架往往与分布式文件系统(DFS)是一对好基友。HDFS就是构建在Hadoop框架之上的分布式文件系统。这里,想用一种直观的方法讨论一下MapReduce的计算效率。
假设需要处理的数据量D,MR产生的中间结果为σD,σ是一个系数。ωD为单机处理D所需要做的计算量。P为MR框架可以并行的个数,那么效率公式如下:
其中c是常量,MR的工作量等于每个处理器需要处理的实际工作量,在加上需要传输的中间结果。可以看到,MR的工作效率与处理器的数目(map+reduce的数目)没有关系,只与
σ有关,也就是与中间数据的比例有关。在使用MR框架计算时,需要尽可能的减少σ,提高MR的工作效率。
希望这篇文章对你理解MR有帮助!
参考资料
[1] MapReduce Simplified Data Processing on Large Clusters
[2] Mincemeat Project on Github
[3] Octopy: Easy MapReduce for Python
[4] mincemeat.py-最精简的MapReduce引擎实现
[5] Coursera : Web Intelligence and Big Data
【Coursera课程笔记】Web智能和大数据Week3_MapReduce相关推荐
- 用户数据销售额分析动态大屏看板+大屏数据可视化图表组件(折线图+圆柱图+散点图+饼图+漏斗图+雷达图+水位图)+智能web端高保真大数据动态可视化大屏看板+中国动态地图+智慧电商实时动态数据大屏看板
作品内容:用户数据销售额分析动态大屏看板+大屏数据可视化图表组件(折线图+圆柱图+散点图+饼图+漏斗图+雷达图+水位图)+web端高保真大数据动态可视化大屏看板+中国动态地图+电商实时动态数据大屏看板 ...
- 软件开发全套视频教程汇总(javaSE,javaEE,linux,android开发,C# ,web前端,大数据云计算,数据挖掘,web前端,php开发,UI设计,C++开发,3D视频)
软件开发全套视频教程汇总(javaSE,javaEE,linux,android开发,C# ,web前端,大数据云计算,数据挖掘,web前端,php开发,UI设计,C++开发,3D视频) 这是我以前学 ...
- 智能&大数据时代,架构师思维的十个学习步骤(优化版)
前言: 秦朝的<书同文.车同轨>,加上唐朝的<诗同形>,有效的减法设计,创造了大一统(加法)的辉煌国度.君不见,在前面各步骤里,诸如:从复杂中设计出简单.以需求检验设计等都是基 ...
- 中兴智能视觉大数据公交车专用道移动智能电子警察系统功能、特点及优势详细介绍...
中兴智能视觉大数据公交车专用道移动智能电子警察系统功能.特点及优势详细介绍 公交车专用道移动智能电子警察系统是专为交管部门查处社会车辆高峰期占用公交车道行驶行为的一款产品. 系统由前端抓拍设备和后端电 ...
- 中兴智能视觉大数据报道:人脸识别准确率高达99.8%
中兴智能视觉大数据报道:随着人工智能(AI)在数十个火车站安装,其中包括了5秒识别乘客身份的面部识别系统,让中国火车站忙碌的场景开始成为过去时.当一名乘客走近车站面部识别系统内的摄像头时,摄像头会扫描 ...
- 中兴智能视觉大数据:人脸识别技术目前处于“用的不够,用的不好”
中兴智能视觉大数据报道:在2018年5月30日举行的"人脸识别等AI技术在校园周边安全中的应用"研讨会上,中国人民大学危机管理研究中心主任唐钧指出,人脸识别等AI技术具有" ...
- 广州市城市智能交通大数据体系研究与实践
广州市城市智能交通大数据体系研究与实践 张孜1, 黄钦炎2, 冯川2 1 广州市交通运输局,广东 广州 510620 2 广州交通信息化建设投资营运有限公司,广东 广州 510620 摘要:为了构建现 ...
- 苏宁智能 BU大数据中心数据治理团队负责人韦真:数据治理“三字经”,超实用!...
中生代技术 链接技术大咖,分享技术干货 全文:4700字 " 随着移动互联网和大数据的蓬勃发展,"数据即资产"的理念深入人心.大数据已发展成为具有战略意义的生产资料,在各 ...
- 京东举办首届大数据峰会 打造智能零售大数据“操作系统”
与英特尔合作建立数字化零售联合实验室.发布<京东大数据技术白皮书>.推出针对线下零售.区块链等领域的多款产品,联合行业内包括英特尔.谷歌.浪潮.联想等顶尖互联网企业,以及中国计算机协会.中 ...
最新文章
- EtherType :以太网类型字段及值
- 大学的软件测试怎么学
- NEFU709(第K个圆的半径)
- 【译】Visual Studio 2019 中 WPF UWP 的 XAML 开发工具新特性
- MySQL基础---增删改查语法
- Linux: sysv-rc-conf管理Ubuntu server开机启动服务
- 机器学习笔记(2):线性回归-使用gluon
- C# dll加载,抽象方法的使用
- deque stack java_一文弄懂java中的Queue家族
- iOS利用Speech Kit实现语音识别
- rest_framework之解析器、路由控制、分页
- 服务器怎么支持smtp,如何搭建邮箱服务器,自建smtp服务器
- 【无标题】A <Route> is only ever to be used as the child of <Routes> element, never rendered directly. Pl
- 移动Web开发基础-Viewport
- laragon安装postgreSQL
- php ssl 465,帝国CMS邮件无法发送SSL465端口无法发送的解决办法
- Shell 脚本的详细解读 (三)
- kali内开启键盘背光
- 在 Excel 2007中手动为坐标图添加坐标轴标题
- 数据结构排序-7-1 统计工龄 (20 分)
热门文章
- boost::fibers模块实现single stream的测试程序
- boost::describe模块实现==重载的测试程序
- GDCM:读取流图像的测试程序
- boost::core模块实现交换std的dateorder
- Boost:Bimap简单示例
- ITK:观察事件 Observe An Event
- DCMTK:DcmAttributeFilter类的测试程序
- C语言实现heap sort堆排序的算法(附完整源码)
- OpenGL 深度测试depth test 的实例
- OpenGL使用计算着色器进行GPU光线跟踪