【码农翻身笔记】MapReduce的来龙去脉

为什么计算也要分布式

使用HDFS可以把文件分割为一个一个的片段,然后存储在各个节点上,同时为了保证高可靠性,存的是3副本。

这一切的操作对客户端都是透明的,它仍然是觉得是在对同一个文件进行操作。这样就可以把海量的Web日志文件存储到了HDFS当中。

但是存储架构已经分布式了,如果只有一个节点把所有文件读出来,然后在一台机器上处理,对于海量数据来说,依然没有什么用。

所以现在更重要的是把计算也分而治之,让计算程序也分布式。也就是我们在【大话存储】多CPU架构变迁, SMP,NUMA,MPP里面说到过的,当底层架构分布式了以后,上层的应用也需要分布式

而且要尽可能让计算靠近数据,这样的好处就是不需要大规模的交换数据,降低网络流量的开销。

过程

比如说要统计URL的访问次数,可以把计算程序分发到每个节点上,然后在节点上并行计算,首先把log按照行进行分隔,提取URL,把次数初始化为1。

然后进行分组,就是把相同的URL合并同类项,也就是Shuffle

最后累积URL的访问次数

这样程序要做的就比较简单的了

  • 把分片中的URL提取出来,记数
  • 累计每个URL的访问量

而且这两个步骤不需要维护中间状态,也就是只需要根据输入得到输出即可,类似于一个函数。

这样的好处在于,程序之间不互相依赖,可以把程序部署在任意的机器上去,并行处理。

还有一个问题,如果一个程序没有运行完就宕了怎么办?

可以跟踪每个程序的状态,如果发现它不可用了,就可以在另一个机器重新运行,甚至也可以多开几个程序,让他们竞争,谁先出结果就用谁的。

计算框架——MapReduce

那么完全可以搞一个计算框架来处理呢?

所谓框架就是把重复的工作都做了,让用户的程序越简单越好。那么这个框架应该包含

  • 把程序分布在各个节点上运行
  • 监控状态

这个框架就叫MapReduce

所谓Map指的是把一个函数施加于一组数据上,然后可以得到另一组数据。

也就是说map就是数据的变换,把一个数据变成另一个。

比如说我们先对日志按行进行分割,所以程序输入就是一行一行的日志记录。

对每一行 进行处理,提取出URL,变换成键值对的形式{URL:1},这就是map操作

而Reduce操作就是给一个函数和初始值,对列表的每个一元素都调用该函数,不断折叠列表,变成一个值。类似于合并

比如初始值为0,列表是[1,2,3,4],可以依次取出列表中的值与之前累积的值进行“+”。

参考:数据分布式了,计算也得跟上!

原文地址:https://www.cnblogs.com/dy2903/p/8513781.html

时间: 2024-10-15 03:36:25

【码农翻身笔记】MapReduce的来龙去脉的相关文章

戏说西游||TCP/IP协议的由来(灵感来自“码农翻身”微信公众号)

引子 话说唐僧师徒四人西行取经,终于来到了西方极乐世界,取得真经,然而如何运回真经成了大问题,故事就这样展开了: 大唐王朝贞观八十一年,某日清晨 "悟空,为师带领你们终于取得真经,可是奈何如何将真经运回东土大唐呢?" "师傅,不用担心,俺老孙在筋斗云的基础上开发出了运输真经的法术--'TCP协议',只要严格学习俺法术的口诀,严格遵守俺定制的规则,只需要不断的往筋斗云上放经文,筋斗云就会自动往返运输真经,俺可保真经运回大唐!" "不愧是悟空,既然如此,悟能,

转:码农翻身全年文章精华

在码农翻身公众号写了一年多, 最大的体会就是:原创真心不易! 每天思考的最大问题就是: 下一篇文章写啥? 在大家的支持和鼓励下,还是坚持了下来,  回头看看走过的路,这一年过得还算充实. 很快就要过年了, 我也要休息一下, 春节后重新出发 ! 我把这一年来的精华文章整理了一下,作为节前的最后一篇, 欢迎转发分享. 再次感谢大家一年来的陪伴, 预祝大家春节快乐,万事如意! 大话编程 我是一个线程 我是一个Java class Javascript: 一个屌丝的逆袭 Java:一个帝国的诞生 JSP

码农翻身 PDF下载

网盘下载地址:码农翻身 PDF下载 – 易分享电子书PDF资源网 作者: 刘欣 出版社: 电子工业出版社 出品方: 博文视点 出版年: 2018-6-1 页数: 296 定价: 69.00元 装帧: 平装 ISBN: 9787121341175 内容简介 · · · · · · <码农翻身>用故事的方式讲解了软件编程的若干重要领域,侧重于基础性.原理性的知识. <码农翻身>分为6章.第1章讲述计算机的基础知识:第2章侧重讲解Java的基础知识:第3章偏重Web后端编程:第4章讲解代

码农翻身之——分布式,集群,负载均衡

分布式:将不同的业务分布在不同的地方,这就构成了一个分布式的系统.(如下图所示) 假设由三个系统A.B.C构成的一个分布式系统(A作为主系统),那么会存在如下的问题——系统A是这个分布式系统的“脸面”,用户直接访问,当访问量大的时候要么是速度慢,要么直接挂掉,并且系统A只有一份,所以会引发单点失败. 集群:将上述A系统部署好几份(如下图的3个服务器),每一份都是系统A的一个实例,对外提供同样的服务,这样就算其中一个挂掉,还有另外两个.这三个服务器上的系统组成一个集群(Cluster). 问题——

每周一书《码农翻身(好玩有趣的编程知识)》分享!

作者简介 刘欣(@码农翻身):15年的软件行业从业经验,前IBM系统架构师,擅长企业应用架构和设计,领导过多个企业级应用架构设计和开发工作. 内容简介 <码农翻身>用故事的方式讲解了软件编程的若干重要领域,侧重于基础性.原理性的知识. <码农翻身>分为6章.●第1章讲述计算机的基础知识:●第2章侧重讲解Java的基础知识:●第3章偏重Web后端编程:●第4章讲解代码管理的本质:●第5章讲述了JavaScript的历史.Node.js的原理.程序的链接.命令式和声明式编程的区别,以及

《码农翻身》读后感

1.计算机的世界 线程: 线程运行步骤:就绪.等待.运行 多线程并发问题 加锁.死锁问题,按照资源顺序申请锁 TCP/IP 不可靠通道进行可靠性传输 TCP的三次握手和四次挥手 滑动窗口协议 CPU CPU比内存快100倍,比硬盘快百万倍. 寄存器.程序计算器 局部性原理 进程 批处理系统 进程记录了寄存器的志.指令值.和消耗时间等 地址重定向 硬盘 磁道.扇区 文件.文件系统 I/O设备 总线和端口 轮询.中断 数据库 查询 并发访问 原子性问题 安全问题 socket 对TCP连接的封装 翻

干货 | 码农翻身提高工作效率的必备工具

要问闯荡江湖的码农最怕什么 那么,我斗胆猜测一下 一定是敲代码的 -- 速度 速度 还是速度! 速度是效率的关键 决定几点回家 几点见到心爱的妞 几点吃鸡 -- 今天,本黑就来给大家推荐一下 程序员提高效率的必备工具 1.Git 以前是有不少的版本控制工具,有好用的,同时也有不太好用的,但总的来说它们都没有很好的发展.这时候Git出现了,还有GitHub,EGit,一旦你用上了这个神奇的工具,估计你就很难再碰到更好的VCS了.还没用过Git?赶快试一下吧. 2.Stack Overflow 不开

非专业码农 JAVA学习笔记 6java工具类和算法-string

续<非专业码农 JAVA学习笔记 5 java工具类和算法> 五.字符串string 字符串和字符的差别:字符串双引号括起来”n”,字符用单引号括起来,表示一种符号’\n’ 1.string的主要方法和属性 类 方法或者属性 备注 定义string Stirng s=new string(“值”),string s=”值” 属性 string.length:string的长度为字节 方法startswith,endswith s.startwith(“值”)-以值为开头,s.endswith(

非专业码农 JAVA学习笔记 3 抽象、封装和类(2)

(2).静态域-放在内存公共存储单元,不放在特定的对象,用static修饰 (续上一篇<非专业码农 JAVA学习笔记 3 抽象.封装和类(1)>...) (3).静态初始器-由static引导的一对大括号括起来的语句组,作用跟构造函数相似 (4).最终域-final引导的,值在整个过程都不发生改变的 5.方法 (1)方法的定义:修饰词1 修饰词2…返回值类型 方法名(参数) throw[异常列表] 这里个人经验就是注意定义了返回值的方法,要在方法体里面增加return 该类型变量:此外遇到if