作者:Coldwings
链接:https://www.zhihu.com/question/29936822/answer/48586327
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

简单的说就是问题可以划分成若干单元,每个单元的计算互不相关,单元计算结果可以在可以承受的时间内合成为总结果的计算。再说直白一点:所有分治模型都可交由hadoop解决。可以说spark是功能更全面的hadoop,支持一些诸如filter、group之类的操作,但是原本思想仍是map reduce,差别不太大。

map reduce确切的说是两步操作:map操作和reduce操作。具体执行的时候其实是语言无关的,只要你能按照其标准输入输出,哪怕用brainfu*k写的代码,能独立运行都可以。当然hadoop在java上有框架接口,spark直接构建在scala上会更加方便开发,但是实际上完全可以用任意语言做map reduce。

举个几乎每个教程都会谈到的例子:单词出现次数统计。如果只有很少的文本,这个统计基本上就是划分单词,统计次数而已,单机上写个循环就能解决。但是如果文本量超TB甚至更多,单机的效率自然吃不消。但是我们可以把这超长文本划分为若干段,每一段就MB量级,分配给一个计算节点,那么每段对于一个分布式计算节点而言计算量就可以接受了。

mapper部分是一个结算节点用的处理程序,用标准输入输出流接收数据和输出处理结果。对于单词统计,它输入的内容自然是一段文章,输出的内容则是这段文章中的单词统计结果。显然节点之间所做的工作仅与送给此节点的数据有关,而与其它节点的数据或结果无关。例如对于文字 “I love hadoop”,这个mapper可以给出如下输出:
I 1
love 1
hadoop 1

reducer则是负责收集数据的。它通过标准流输入输出,输入格式等同于mapper的输出格式。hadoop会把所有mapper的结果简单拼接一下然后全扔给reducer(根据配置不同,可能拼接时会有排序)。
reducer所做的工作则是将这些内容合成出最终结果。

比如两段文本“I love hadoop”,以及“I love you”,分配给mapper处理,会得到两个输出
1
-------
I 1
love 1
hadoop 1

2
-------
I 1
love 1
you 1

然后reducer拿到的输出则是拼在一起的结果
I 1
love 1
hadoop 1
I 1
love 1
you 1

reducer进行处理合并,最终结果大概是
I 2
love 2
hadoop 1
you 1

而hadoop或者spark框架的存在,使得你可以写好mapper和reducer,然后告诉框架你的数据在哪儿,怎么划分之类的配置,框架自动将需要的工作分配给实际上的计算节点,自动连接的mapper和reducer的输入输出,然后得到计算结果。其中你并不需要考虑多机通讯、状态监测之类的问题,只需要写好与本地单机运算没什么差别的简单程序就好。

因此对统计、学习、数学运算(迭代),求最优解之类的问题,都可以适用于map reduce。
 
 
 
作者:何史提
链接:https://www.zhihu.com/question/29936822/answer/48553511
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

谢邀。

在过去,处理大量数据或计算时,我们会依頼一部超级电脑,因为他有快速的计算器和大量的容量。但这不是一般人可以负担,而且现在的数据量是超级电脑也无法处理的,故人们便要想一个系统出来让人们可以很方便同时用多部电脑(无论是家用电脑或超级电脑与否)做计算和保存。另外,即使我们有一个高速的中央处理器,但在硬盘读写数据的速度却是硬伤,所以如果有多部电脑同时做读写,那可省下不少时间。

MapReduce就是来解决这问题的。现在很多公司都用Hadoop或Spark,这些都是用MapReduce模式做计算的。当我们有很多数据,要建模时,Hadoop可行使分布式计算,如Google计算PageRank、广告公司计算Bayes模型、数据搜索如在一千部电脑内的硬盘中寻找有史以来最高的气温⋯⋯

Hadoop是用Java写的。我相信很多有经验数据科学家都很喜欢用R或Python建模,然后用Java或C++实现,这是无可厚非的,因为用Python一类的语言建模很有效率,当我们不知道要用什么模型和算法时,我们一定要快速验证。但问题是,当我们知道什么算法可行,却又要用另一工具实现时,那就有点费时失事。而且Python用Hadoop是很麻烦的,人们很少用Python做分布式计算,所以我们用Scala(一个JVM语言),而这跟Python一样可以interactive programming,又是函数式编程(处理数据方便),却又行在JVM上。而对应的MapReduce工具就是Spark。用Spark,数据科学家可即时测试不同的模型,而测试可在MapReduce的架构下进行,而且可以interactive programming,就像Python或MATLAB一样。

map reduce的更多相关文章

  1. MapReduce剖析笔记之三:Job的Map/Reduce Task初始化

    上一节分析了Job由JobClient提交到JobTracker的流程,利用RPC机制,JobTracker接收到Job ID和Job所在HDFS的目录,够早了JobInProgress对象,丢入队列 ...

  2. python--函数式编程 (高阶函数(map , reduce ,filter,sorted),匿名函数(lambda))

    1.1函数式编程 面向过程编程:我们通过把大段代码拆成函数,通过一层一层的函数,可以把复杂的任务分解成简单的任务,这种一步一步的分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. ...

  3. 记一次MongoDB Map&Reduce入门操作

    需求说明 用Map&Reduce计算几个班级中,每个班级10岁和20岁之间学生的数量: 需求分析 学生表的字段: db.students.insert({classid:1, age:14, ...

  4. filter,map,reduce,lambda(python3)

    1.filter filter(function,sequence) 对sequence中的item依次执行function(item),将执行的结果为True(符合函数判断)的item组成一个lis ...

  5. python基础——map/reduce

    python基础——map/reduce Python内建了map()和reduce()函数. 如果你读过Google的那篇大名鼎鼎的论文“MapReduce: Simplified Data Pro ...

  6. Map/Reduce 工作机制分析 --- 作业的执行流程

    前言 从运行我们的 Map/Reduce 程序,到结果的提交,Hadoop 平台其实做了很多事情. 那么 Hadoop 平台到底做了什么事情,让 Map/Reduce 程序可以如此 "轻易& ...

  7. Map/Reduce个人实战--生成数据测试集

    背景: 在大数据领域, 由于各方面的原因. 有时需要自己来生成测试数据集, 由于测试数据集较大, 因此采用Map/Reduce的方式去生成. 在这小编(mumuxinfei)结合自身的一些实战经历, ...

  8. 用通俗易懂的大白话讲解Map/Reduce原理

    Hadoop简介 Hadoop就是一个实现了Google云计算系统的开源系统,包括并行计算模型Map/Reduce,分布式文件系统HDFS,以及分布式数据库Hbase,同时Hadoop的相关项目也很丰 ...

  9. map/reduce of python

    [map/reduce of python] 参考: http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac92 ...

随机推荐

  1. eclipse-debug时直接进入/不进入/提示进入调试页面修改

    eclipse使用debug调试程序时 默认设置每次程序走到断点位置时提示是否进入调试页面(如图) 而个人习惯有些系统直接进入调试页面.也有些人系统不进入调试页面调试 在这里勾选Remember my ...

  2. selenium+webdriver+python 中警告框的处理方法

    在自动化测试过程中,经常会遇到弹出警告框的情况,如图所示: 在 WebDriver 中处理 JavaScript 所生成的 alert.confirm 以及 prompt 是很简单的.具体做法是使用  ...

  3. selenium在Eclipse中打开fireFox浏览器是报报错connect to host 127.0.0.1 on port 7055

    1.相信很多同学刚接触selenium时,在Eclipse中打开fireFox浏览器是报报错: org.openqa.selenium.firefox.NotConnectedException: U ...

  4. AngularJs学习之一使用自定义的过滤器

    script: 参数item是由AngularJs提供的,是应当被过滤的对象集合.而showComplete是我们传入的参数. {{item.action}} 用ng-model创造一个名为showC ...

  5. IOS URL 编码和解码

    1.url编码 ios中http请求遇到汉字的时候,需要转化成UTF-8,用到的方法是: NSString * encodingString = [urlString stringByAddingPe ...

  6. 【matlab】设定函数默认参数

    C++/java/python系列的语言,函数可以有默认值,通常类似如下的形式: funtion_name (param1, param2=default_value, ...) 到了matlab下发 ...

  7. ini_set()函数的使用 以及 post_max_size,upload_max_filesize的修改方法

    Apache服务器处理: ini_set('display_errors', 'Off');ini_set('memory_limit', -1); //-1 / 10240Mini_set(&quo ...

  8. Windows下Nginx+Mysql+Php(wnmp)环境搭建

    前言 最近想在windows下使用nginx搭建web环境,本来想用套件(WNMP)一键安装,但后来放弃了,觉得还是自己动手,丰衣足食的好,而且套件的局限性太大.所以后来就各种搜索,看到前辈写关于wn ...

  9. gvim e303 无法打开 “[未命名]“的交换文件,恢复将不可能

    今天vim出现:“gvim e303 无法打开 “[未命名]“的交换文件,恢复将不可能” 解决办法: 修改你的.vimrc,增加下面的一行: set directory=.,$TEMP "默 ...

  10. django redirect的几种方式

    You can use the redirect() function in a number of ways. By passing some object; that object’s get_a ...