作者: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. 深入理解JVM内幕:从基本结构到Java 7新特性

    转自:http://www.importnew.com/1486.html 每个Java开发者都知道Java字节码是执行在JRE((Java Runtime Environment Java运行时环境 ...

  2. 【POJ 2942】Knights of the Round Table(点双连通分量,二分图染色)

    圆桌会议必须满足:奇数个人参与,相邻的不能是敌人(敌人关系是无向边). 求无论如何都不能参加会议的骑士个数.只需求哪些骑士是可以参加的. 我们求原图的补图:只要不是敌人的两个人就连边. 在补图的一个奇 ...

  3. 解决bind错误 bind: Address already in use

    关于bind错误的处理: bind: Address already in use 原因: 操作系统没有立即释放端口 解决一: 等待一段时间运行网络程序即可 解决二:通过setsockopt进行设置, ...

  4. java 中变量的存储与引用

    java交换两个变量的值 1.幼儿园版 package tst; public class Test { public static void main(String[] args) { String ...

  5. SQL Server 2008及以上版本出现”SQL Server 复制需要有实际的服务器名称才能连接到服务器...“的问题解决

    出现如下错误: 这是由于安装时的计算机名更改导致会出现如上的错误. 解决方法: 1.SQL方式: 1)先执行如下脚本,看下名称是否一致 use master go select @@servernam ...

  6. 关于captive portal

    portal是入口的意思,我的理解,在这里其实就是门户或者主页.captive portal,就是强制主页.校园网里面的验证通常都是通过一个网页验证来完成,不管你点要访问哪一个网站,它都会强制给你转到 ...

  7. static和public的区别

    static:静态.   可以设置:静态类.静态变量.静态方法.   没有使用static修饰的成员为实例成员. 静态成员的使用:通过类名.   1.不加static修饰的成员是对象成员,归每个对象所 ...

  8. php常用函数(持续更新)

    每一种编程语言在用的过程中都会发现有时候要一种特定需求的功能函数,结果没有内置这样的函数,这个时候就需要自己根据已有函数编写尽可能简单的函数,下面是我在做php相关工作时积累下的函数,会持续更新,您要 ...

  9. Scala implicit

    Scala implicit implicit基本含义 在Scala中有一个关键字是implicit, 之前一直不知道这个货是干什么的,今天整理了一下. 我们先来看一个例子: def display( ...

  10. 关于win7上内存占用较大的说明

    1      Win7系统较XP系统内存占用高: 由于xp系统属于轻量化的系统,而win7系统是一个重量型的系统,在两者的内存管理机制上有很大的区别,根据业界和微软对外的发布公告中可以看到,win7系 ...