什么是MapReduce

MapReduce是Google提出的一个软件架构,用于大规模数据集(大于1TB)的并行运算。概念“Map(映射)”和“Reduce(归纳)”

映射和归纳

  1. 映射

    一个映射函数就是对一些独立元素组成的概念上的列表(例如,一个测试成绩的列表)的每一个元素进行指定的操作(比如,有人发现所有学生的成绩都被高估了一分,他可以定义一个“减一”的映射函数,用来修正这个错误。)。事实上,每个元素都是被独立操作的,而原始列表没有被更改,因为这里创建了一个新的列表来保存新的答案。这就是说,Map操作是可以高度并行的,这对高性能要求的应用以及并行计算领域的需求非常有用。
  2. 归纳

    归纳操作指的是对一个列表的元素进行适当的合并(继续看前面的例子,如果有人想知道班级的平均分该怎么做?他可以定义一个归纳函数,通过让列表中的奇数(odd)或偶数(even)元素跟自己的相邻的元素相加的方式把列表减半,如此递归运算直到列表只剩下一个元素,然后用这个元素除以人数,就得到了平均分)。虽然他不如映射函数那么并行,但是因为归纳总是有一个简单的答案,大规模的运算相对独立,所以归纳函数在高度并行环境下也很有用。

可靠性

MapReduce通过把对数据集的大规模操作分发给网络上的每个节点实现可靠性;每个节点会周期性的把完成的工作和状态的更新报告回来。如果一个节点保持沉默超过一个预设的时间间隔,主节点(类同Google档案系统中的主服务器)记录下这个节点状态为死亡,并把分配给这个节点的数据发到别的节点。

参考此处

Map-Reduce:

  发扬光大从Google的论文-MapReduce: Simplified data processing on large clusters开始的。Map-Reduce将程序的运行分成了Map和Reduce两个步骤,Map是一个读取、处理原始数据的过程,而Reduce是根据Map处理的内容,进行整合、再处理。Reduce可以认为又是一个Map,为下一级的Reduce过程作准备,这样数据的处理可以按这种方式进行迭代。

  Map-Reduce的重点在下面的几处:

  1)运行程序的方式,Map-Reduce一般是在以GFS(Google文件系统),或者HDFS等类似的系统上面进行的,这个系统一般有诸多的如磁盘负载平衡,数据冗余(replica),数据迁移(比如说集群中的某台硬盘坏了,这个硬盘里面的数据会用某种方式备份到其他的硬盘中去,而且保证每块硬盘的数据量都大致平衡)。不过这里先不谈数据的存储,主要谈谈任务的调度。

  一般像这样的集群里面都有一百台以上的电脑,按每个电脑8个核计算,至少会有几百上千个CPU的资源。在运行每一个Map-Reduce的时候,用户会先填写需要多少的资源(CPU与内存),然后集群的负责人(可能被称为JobMaster),会去查看当前集群中的计算资源情况,看看能否成功的运行这个作业。如果不行的话,会排队。举一个Map-Reduce的例子:

  对于一个很大的文件(由一堆的浮点数组成的),计算这个文件中Top1000的数是什么。那么程序的运行可能是下面的过程。

  a. 先在N个CPU(可能在不同的电脑中的)上运行程序,每个CPU会负责数据的一部分,计算出Top1000的数值,将结果写入一个文件(共N份数据)

  b. 在M = N/16个CPU上运行程序,每个CPU会负责上面步骤的16个结果文件,计算出这些文件中Top1000的数值,然后将结果写入一个文件(共N / 16份数据)

  c. 在O = M/16个CPU上运行程序,同样每个CPU负责上面的16个结果文件。(共N / 256份数据)

  ..

  按照这种方式迭代,直到求出真正的Top1000数值。

  所以说,Map-Reduce的数据按每次迭代,是一个减少的过程,如果数据处理的时候有这样的特性,那就非常适合于用Map-Reduce去解决。

MapReduce的 "HelloWorld"

暂时还么找到....

贴个教程链接

mapReduce入门教程的更多相关文章

  1. 一条数据的HBase之旅,简明HBase入门教程-Write全流程

    如果将上篇内容理解为一个冗长的"铺垫",那么,从本文开始,剧情才开始正式展开.本文基于提供的样例数据,介绍了写数据的接口,RowKey定义,数据在客户端的组装,数据路由,打包分发, ...

  2. 详细的Hadoop的入门教程-完全分布模式Fully-Distributed Operation

    1. 前面在伪分布模式下已经创建了一台机器,为了统一命名,hostname更名为hadoop01.然后再克隆2台机器:hadoop02. hadoop03:将第一台机器hadoop01上的伪分布停止, ...

  3. wepack+sass+vue 入门教程(三)

    十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...

  4. wepack+sass+vue 入门教程(二)

    六.新建webpack配置文件 webpack.config.js 文件整体框架内容如下,后续会详细说明每个配置项的配置 webpack.config.js直接放在项目demo目录下 module.e ...

  5. wepack+sass+vue 入门教程(一)

    一.安装node.js node.js是基础,必须先安装.而且最新版的node.js,已经集成了npm. 下载地址 node安装,一路按默认即可. 二.全局安装webpack npm install ...

  6. Content Security Policy 入门教程

    阮一峰文章:Content Security Policy 入门教程

  7. gulp详细入门教程

    本文链接:http://www.ydcss.com/archives/18 gulp详细入门教程 简介: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优 ...

  8. UE4新手引导入门教程

    请大家去这个地址下载:file:///D:/UE4%20Doc/虚幻4新手引导入门教程.pdf

  9. ABP(现代ASP.NET样板开发框架)系列之2、ABP入门教程

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之2.ABP入门教程 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...

随机推荐

  1. 常用的layer弹出层

    本文来自 松耦合 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/dunegao/article/details/78978448?utm_source=copy 常用 ...

  2. CentOS7利用本地yum源配置NBD

    一:CentOS7.0创建本地YUM源 (物理机:直接将刻录的CentOS7光盘利用光驱插入物理机上) (虚拟机: CD/DVD>>连接本地ISO) 针对物理机192.168.9.112进 ...

  3. 丑数(Ugly Numbers, UVa 136)

    丑数(Ugly Numbers, UVa 136) 题目描述 我们把只包含因子2.3和5的数称作丑数(Ugly Number).求按从小到大的顺序的第1500个丑数.例如6.8都是丑数,但14不是,因 ...

  4. LAMP+Varnish的实现

    基于Keepalived+Varnish+Nginx实现的高可用LAMP架构 注意:各节点的时间需要同步(ntpdate ntp1.aliyun.com),关闭firewalld(systemctl ...

  5. 【reidis中ruby模块版本老旧利用rvm来更新】

    //gem install redis时会遇到如下的error: //借助rvm来update ruby版本

  6. python反射怎么用

    反射: 通过字符串的形式对 对象 进行增删改查 setattr 设置某个属性的值 class A(object): def __init__(self): self.name = "sath ...

  7. Elasticsearch 映射操作

    一.创建 语法: PUT /索引库名称/_mapping/类型名称 { "properties": { "字段名": { "type": 类 ...

  8. A1041

    输入n个数,找出第一个只出现一次的数,输出它. 如果没有,输出none. 思路: 将输入的数值作为HashTable的数组下标即可. #include<cstdio> ], hashTab ...

  9. golang 协程嵌套,会产生依赖关系(父子关系)么?

    编码时冒出一个问题:在一个协程内部,再创建一个或多个协程,是否会产生依赖关系? 做了一个小实验,这里随笔记录一下经过,备注后续深入研究. test代码: package main import ( & ...

  10. 快速创建一个vue项目

    vue脚手架 用来创建vue项目的工具包 创建项目: npm install -g vue-cli vue init webpack VueDemo 开发环境运行: cd VueDemo npm in ...