作者: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. 怎么学习AOPR使用方法

    Advanced Office Password Recovery作为一款专业级别的Office密码破解工具,对十几种office文档的密码都可以有效的破解.一些用户朋友才开始接触Advanced O ...

  2. js 上传文件模拟Form 表单

    使用FormData对象 在本文章中 创建一个FormData对象 使用HTML表单来初始化一个FormData对象 使用FormData对象发送文件 利用FormData对象,你可以使用一系列的键值 ...

  3. xargs 命令

    1. xargs 很好用,可以将多个结果分段传给下一个命令进行计算 比如说find 找到很多个文件,又想对每个文件统计条数: find 20151201 -name "mjoys*.txt& ...

  4. java高新技术-反射

    一.反射的基石->Class类 定义一个类使用 class 有一个类叫Class Java程序中的各个Java类属于同一类事务,描述这类事物的Java类名就是Class. Person类代表人, ...

  5. JVM学习笔记:字节码执行引擎

    JVM学习笔记:字节码执行引擎 移步大神贴:http://rednaxelafx.iteye.com/blog/492667  

  6. C# winform窗体设计-数据库连接

    本篇文章内容主要是小编上课所学的总结 最近小编在学习C#中的数据库管理方面,主要学习到数据库的增删改查,查询学生平均分,最低分,最高分等操作 [本篇文章中小编主要讲解数据库的连接] 在C#中使用数据库 ...

  7. Cacti /graphs_new.php SQL Injection Vulnerability

    catalogue . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 other SQL injection vulnerability ...

  8. Deformity ASP/ASPX Webshell、Webshell Hidden Learning

    catalog . Active Server Page(ASP) . ASP.NET . ASP WEBSHELL变形方式 . ASPX WEBSHELL变形方式 . webshell中常见的编码转 ...

  9. Unity 依赖注入知识点

    三种依赖注入方法,构造器注入.属性注入.方法注入 可以配置Config文件,来实现不用修改代码.需要先将接口与实体关联,然后使用时会自动加载对应实体. namespace WeChatConsole ...

  10. HDU 5738 Eureka

    传送门 题目大意: 给出平面上的$n$个点,每个点有唯一的标号($\text{label}$),这$n$个标号的集合记作$S$,点可能重合.求满足下列条件的$S$的子集$T$的数目: 1. $|T|\ ...