当前课程知识点:大数据系统基础 >  4. 处理框架 >  授课视频 >  4.7MapReduce总结

返回《大数据系统基础》慕课在线视频课程列表

4.7MapReduce总结在线视频

4.7MapReduce总结

下一节:4.8Pig Latin

返回《大数据系统基础》慕课在线视频列表

4.7MapReduce总结课程教案、知识点、字幕

下面我们总结一下

刚才谈到的

MapReduce的一些内容

MapReduce的核心思想

是以下几个

一个是数据并行

这个数据是可以

切分成很多块的

块和块之间是无关的

它是或者叫独立的

independent

那么我们需要做的

就是针对每一块

调用Map或者Reduce

所以它可以并行

这叫数据并行

如果Map和Map之间

或者Reduce和Reduce之间需要通讯

那这种模型

它就不适于做MapReduce

这个大家要理解

MapReduce只能适用于

一系列的工作

那么就是数据和数据之间

是可以切分的

那什么东西是不可以切分的

比如后边我们会讲到

很多的机器学习的任务

那个数据它不是说

我单个的看数据

就能解决任何问题的

它可能要把很多的数据

放在一起看

而且这些数据

并没有一些的明显的

可以切分开的

就是所有的数据都搁在一起看

才能够得到一些结果

这样的算法在MapReduce上

就没有一个非常简单的事情

第二点操作必须是确定性的

就像刚才说的

如果它是里头有个随机数

那你除非你知道

这个随机数不会

对自己最后的结果产生影响

否则它是不适于MapReduce的

否则它可能结果会出问题

第三个操作必须是

Idempotent的或者叫幂等的

且是没有副作用的

如果你这操作

做完了之后

你改写了一个其它的文件

你这个磁盘不在

MapReduce控制的文件

那MapReduce系统帮不了你

但是MapReduce

如果你按照它的方法

来写这个Map和Reduce

因为它是一个函数式变程

函数式变程跟函数

是没有副作用的

还没有改一个

程序变量之类的事情

因此这种情况下

MapReduce系统可以保证

每一个操作都是幂等的

所以这样的话

它才能保证

它最大的运行的效率

第四个我们不要任何时间

都做很多小的通讯

我们一定要把通讯集中起来做

那么在MapReduce当中

它是shuffle的过程中

才有通讯

当然我们不算

它读文件系统的一些通讯

操作的所有的存储

都是在硬盘上的

MapReduce是一个

基于磁盘的计算

这次以最大限度地

保证MapReduce可以

在比较小的内存的机器上运行

能够充分地利用CPU的资源

而且它写那写磁盘的时候

它对磁盘的调度

是非常的好的

它只是在磁盘上顺序的写

它没有一些任何的随机的东西

包括它的排序什么的

都是紧啊

基于磁盘的排序

这些保证一个机器机身

内存即使不是那么大

也可以扩展到一个

比较大的数据的规模

那么MapReduce

被用来做什么

其实说实话

现在什么都是用MapReduce

MapReduce早期

在Google发明MapReduce的时候

主要是为了建立索引

因为Google要在

对世界上所有的网页

然后抓取下来建立

一个倒排表这个索引

它是用MapReduce来建立的

显然这个索引

不可能在一台机器来算

而且Google建立索引的速度

是要求越来越高

过去大家每个星期

大家新的网页增加进去的

就不错了

现在如果你不能够

在半天几个小时之内

增加进去那么你的

搜索引擎要落后了

所以现在对索引的

建立一个要求越来越高

对整个的处理的速度

总体的处理速度

要求越来越高

所以现在Google也慢慢的

在离开MapReduce架构

采取一些更加实时的架构来

更新这个索引

但是早期Google使用

MapReduce来建立索引的

对一些文章还以及工作

还是用它进行

一些文本的搜索

比如说一些文章的句类

一些统计性的信息翻译等等

这一系列文本的分析

这都是MapReduce来做的

yahoo测试

yahoo做MapReduce的原因

也是因为它需要建立索引

以及它需要对文本进行分析

比如说做垃圾邮件的过滤

yahoo的邮箱

是跟网易邮箱一样

它实际上是一个非常大的

一个邮箱的提供商

那么它每天收到邮件那么多

它到底哪些是垃圾邮件

这个需要一个庞大的

一个处理的框架

才能够处理出这个

当前垃圾邮件的模型来

那facebook也一样

数据挖掘 广告优化 垃圾检测

这一系列的东西

它实际上都是一系列的

后台运行的一些程序

这些程序并不是

一个交互式的或者实时的

但是它会分析一大堆的数据

然后来得到一个模型

这个模型可以被用来

做一些个实施和交互性的操作

那么MapReduce的优点是什么

首先它是对用户来说

它是完全是一个用户熟悉的写法

就写了一个Map方程

和一个Reduce的方程

着两个函数

你写单机的程序也是这样写

所以完全没有任何一点

你涉及到了分布式编程

你涉及到线程的同步

你涉及到了锁的问题

这些复杂的事情没有

所以一般的程序员

可以写MapReduce

当然它还是要写点程序的

这个事情我们后面再说

它有自动的容错性

不用考虑到分布式系统内

各种各样奇妙的这个失败的道理

这个程序

crush的这个集成crush

不用考虑这些

它有自动的容错

它有自动的规模放缩

你今天用两台机器

跑了个MapReduce

去实验一下

明天你需要跑2000台机器

你就改一个falsh的时候跑了

一共有多少台机器

一共切成多少个MAP

就在几千个机器上跑了

什么程序都不用改

这个非常的漂亮

以及最后是自动的负载均衡

包括慢的任务啊

包括有些任务块

但是由于你把Map切的足够小

你把沙子粒做的足够小

所以它还是在各个机器上

它还是能够放的很平的

所以这就是一种负载均衡的策略

你负载均衡了

那么集群的使用率也高了

集群使用率高了

那么你处理每一个back的数据

所花的钱也少了

所以这个也是一个经济型的体现

但是MapReduce也有它的

不可避免的一些问题

比如说第一个

就是它这个数据流的定义

是非常非常的狭窄的

就限制性非常的强

它必须是一个Map

跟着一个Reduce

那么甚至于这个

非常令人发指的事

你比如说你的Map什么都没有做

那么它专门MapReduce

一个库函数叫

indentmapreduce

那么就是你把

一个(00:05:44)输入进去

再直降输出出去

它还是一模一样的

但是它还是要在

整个磁盘里导一下

它是为了让它能够

直接进它那个架构来处理

那这个是非常的麻烦的

再一个大家想

做一次Map再做一次Reduce

实际上它真的处理不了

太多的信息

所以随便一个

比如说

Google建立一个索引的MapReduce

那都是无数多个MapReduce

照顾连接起来的

这种情况下

你写无数的多个MapReduce

正好配个东西

对一般的程序来讲

它也是搞不太清晰的

到底你从哪个数据集

变化成了哪个数据集

然后最后哪个数据集又变成

几个数据集合成起来变成一个

所以这种情况下

也是不容易实现的

而且这种情况会导致了很多

无用的操作

比如说一个数据集

像这个操作

比如说像split的这种操作

一个数据集竟输出两个结果

但显然一个Reduce

只能输出一个结果

所以最后就要考虑

两次MapReduce

那么你要扫描量两次这个数据集

你要考虑到大数据的

数据集是很大的

比如说这一个数据集

是一个(00:06:41)bait

那么就1000个T

那1000T你需要扫描很久

但是你需要非要扫描两次

只是为了输出两个不同的结果

所以像这种东西也不容易实现

像这种说我只需要Map

我需要多个Map

然后我再做一次Reduce

这个如果你只用MapReduce

实际上的话那你必须

要不然你就手工

把两个Map函数合并在一起

这个东西是一个不结构化的

就是你的copypastecode

一个Map函数

实际上是执行两件事

另外或者是你只能

再加一个Reduce

就像刚才说的

你做了MapReduce之后

它要写回到磁盘了

所以它又多写了一次磁盘

那万一要是一个

(00:07:16)bait数据

你就多写了很多很多数据

所以它整个的

这种数据流的表现形式

它是不容易实现的

这是第一个问题

第二个问题是

MapReduce定义的东西

有点太抽象了

就是一个Map

和一个Reduce

那个Map函数里头

可以包罗万象

用户写什么是什么

这个事情呢就有两个问题

一个就是说它麻烦

很多人做数据

它其实都是做几件事儿

比如说它做一个

求个和 求个平均值

比如说它去过滤一下

就是说我里头带许巍两个字的

就留着

不带许巍两个字的都删掉

这些操作其实到最后

你都必须得手写代码

你得手工实现这个

MapReduce这件事

那么在这种情况下

一个是用户麻烦

再一个系统也麻烦

系统它是不理解

Reduce里写的是啥的

对就是里写的是啥的

它就知道你运行了

一个用户定义的函数

这个函数系统没有任何办法

来帮你优化

为什么系统可以优化

再待会我们这些个后边会看到

系统是有很多的途径

来帮你优化这个的

但是由于它不理解

你到底具体做的是啥

所以它不敢帮你优化

它怕万一优化完了之后

反而优化错了就不对了

所以大家一直就希望

能不能首先定义这些个

个定的操作铁

我能够做一个

非常灵活的数据流

不一定非要先跑完Map

再跑Reduce呢

很多人也做了这样的工作

那么下边我们会介绍一个

另外的一个架构

在作为一个例子

来说这个灵活的数据流处理

是怎么样处理的

大数据系统基础课程列表:

1. 绪论

-授课视频

--什么是大数据

--大数据典型应用

--大数据的特点

--大数据技术体系

--大数据生态系统

--大数据技术挑战

--课程内容

-1. 绪论--Quiz 1

2.云计算

-授课视频

--2.1大数据和云计算关系概述

--2.2并行化理念

--2.3规模经济理念

--2.4从仓库规模计算机到云

--2.5云计算商业模式概述

--2.6云计算带来的价值

--2.7云计算的分类

--2.8虚拟化技术概述

--2.9计算虚拟化

--2.10网络虚拟化:基础

--2.11网络虚拟化:软件定义网络

--2.12软件定义网络实现

--2.13存储虚拟化:用户接口

--2.14存储虚拟化:分布式存储实现方式

--2.15虚拟化技术总结

--2.16OPENSTACK

--2.17云计算小结

-2.云计算--Quiz 2

3.文件存储

-授课视频

--Video

--Video

--Video

--Video

--Video

--Video

--Video

--Video

--Video

--Video

--Video

--Video

--Video

--Video

--Video

--Video

-3.文件存储--Quiz3

4. 处理框架

-授课视频

--4.1大数据的处理框架

--4.2MapReduce编程模型

--MapReduce执行过程

--4.4MapReduce数据流

--4.5MapReduce性能优化与容错

--4.6Hadoop

--4.7MapReduce总结

--4.8Pig Latin

--4.9Pig Latin语法

--4.10Pig Latin 嵌套数据类型

--4.11Pig Latin 实现与优化

--Pig Latin 实现与优化(2)

--4.13类似框架

--4.14章节总结

-4. 处理框架--Quiz4

5.内存计算

-授课视频

--5.1内存计算概述

--5.2并行计算挑战

--5.3并行计算的局限性

--5.4大数据处理并行系统

--5.5内存计算需求

--5.6MapReduce文件传递数据

--5.7内存计算的可行性

--5.8内存层次的延迟

--5.9内存计算实例-spark

--5.10SPARK-RDD

--5.11大数据并行系统

--5.12Spark编程接口

--5.13Spark编程实例——Log挖掘

--5.14Spark编程实例——WorkCount

--5.15Spark实现技术

--5.16复杂的DAG示例

--5.17RDD性能的提高

--5.18Spark应用和生态环境

--5.19Spark的局限性

-5.内存计算--Quiz5

6. NoSQL

-授课视频

--NoSQL与Cassandra

--数据模型、接口、语言

--系统架构与Gossip协议

--一致性哈希与数据分区

--数据副本及一致性

--节点本地数据存储

-6. NoSQL--Quiz6

7. 流计算

-授课视屏

--Video

--Video

--Video

--Video

--Video

--Video

--Video

--Video

--Video

--Video

-7. 流计算--Quiz7

4.7MapReduce总结笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。