map reduce
链接:https://www.zhihu.com/question/29936822/answer/48586327
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
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的更多相关文章
- MapReduce剖析笔记之三:Job的Map/Reduce Task初始化
上一节分析了Job由JobClient提交到JobTracker的流程,利用RPC机制,JobTracker接收到Job ID和Job所在HDFS的目录,够早了JobInProgress对象,丢入队列 ...
- python--函数式编程 (高阶函数(map , reduce ,filter,sorted),匿名函数(lambda))
1.1函数式编程 面向过程编程:我们通过把大段代码拆成函数,通过一层一层的函数,可以把复杂的任务分解成简单的任务,这种一步一步的分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本单元. ...
- 记一次MongoDB Map&Reduce入门操作
需求说明 用Map&Reduce计算几个班级中,每个班级10岁和20岁之间学生的数量: 需求分析 学生表的字段: db.students.insert({classid:1, age:14, ...
- filter,map,reduce,lambda(python3)
1.filter filter(function,sequence) 对sequence中的item依次执行function(item),将执行的结果为True(符合函数判断)的item组成一个lis ...
- python基础——map/reduce
python基础——map/reduce Python内建了map()和reduce()函数. 如果你读过Google的那篇大名鼎鼎的论文“MapReduce: Simplified Data Pro ...
- Map/Reduce 工作机制分析 --- 作业的执行流程
前言 从运行我们的 Map/Reduce 程序,到结果的提交,Hadoop 平台其实做了很多事情. 那么 Hadoop 平台到底做了什么事情,让 Map/Reduce 程序可以如此 "轻易& ...
- Map/Reduce个人实战--生成数据测试集
背景: 在大数据领域, 由于各方面的原因. 有时需要自己来生成测试数据集, 由于测试数据集较大, 因此采用Map/Reduce的方式去生成. 在这小编(mumuxinfei)结合自身的一些实战经历, ...
- 用通俗易懂的大白话讲解Map/Reduce原理
Hadoop简介 Hadoop就是一个实现了Google云计算系统的开源系统,包括并行计算模型Map/Reduce,分布式文件系统HDFS,以及分布式数据库Hbase,同时Hadoop的相关项目也很丰 ...
- map/reduce of python
[map/reduce of python] 参考: http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac92 ...
随机推荐
- C#-WinForm-布局-Anchor-锁定布局、Dock-填充布局、工具箱中的<容器>
Anchor - 锁定布局,锁定控件对于其父控件或窗体的位置,保持与边框固定的距离还是居中等 Dock - 填充布局,控件是否如何进行填充 ============================== ...
- EF(Entity Framework)发生错误”正在创建模型,此时不可使用上下文“的解决办法。 正在创建模型,此时不可使用上下文。如果在 OnModelCreating 方法内使用上下文或如果多个线程同时访问同一上下文实例,可能引发此异常。请注意不保证 DbContext 的实例成员和相关类是线程安全的。 临时解决了这个问题,在Context的构造函数中,禁用了自动初始化:
解决方案: 禁止上下创建. 修改.删除,默认为true public DataDbContext() : base("name=DataDbContext") { this.Da ...
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)【转载】
最近在学习Spring+SpringMVC+MyBatis的整合.以下是参考网上的资料自己实践操作的详细步骤. 1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于20 ...
- 给自定义cell设置分隔线的不同做法
1.给cell添加一个UIView,设置UIView的高度为1,并设置这个UIView的左.下.右约束. 2.不需要给cell添加任何控件,重写cell的- (void)setFrame:(CGRec ...
- 新版汉诺塔(UVa10795 - A Different Task)
题目介绍: 标准的汉诺塔上有n个大小各异的盘子.现给定一个初始局面(见图1),求它到目标局面(见图2)至少需要移动多少步? 移动规则:一次只能移动一个盘子:且在移动盘子之前,必须把压在上面的其他盘子先 ...
- GC基本算法及C++GC机制
前言 垃圾收集器是一种动态存储分配器,它自动释放程序不再需要的已分配的块,这些块也称为垃圾.在程序员看来,垃圾就是不再被引用的对象.自动回收垃圾的过程则称为垃圾收集(garbage collectio ...
- BIEE11G配置Oracle数据源
注:数据库发生变化只需要修改视图层 两种方式: (1) 在BIEE自带的Oracle客户端目录下的tnsname.ora文件中配置 把E:\app\Administrator\produc ...
- bzoj 1208 splay模板题2
自己yy了找前驱和后继,学了学怎么删除...(反正就是练模板) #include<iostream> #include<cstdio> #include<cstring& ...
- Leetcode Find Minimum in Rotated Sorted Array I and II
Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 migh ...
- 【poj1085】 Triangle War
http://poj.org/problem?id=1085 (题目链接) 题意 A,B两人玩游戏,在一个大三角形上放火柴,若A放上一根火柴后成功组成一个三角形,那么这个三角形就归属于A,并且A被奖励 ...