当前课程知识点:大数据系统基础 > 4. 处理框架 > 授课视频 > 4.4MapReduce数据流
下面我们通过这一个图解
来看一下
MapReduce的数据流
到底是怎么流的
MapReduce这个程序
在Google里的MapReduce
它是基于Google的
很多的基础架构的
比如说
它基于google的任务调度
以及基于GSS的这些个的
它有很多的东西在帮助它
来完成这个系统
一会儿我们会讲到
开源实现的Hadoop
它没有这些个帮助
它自己实际上
实现了很多的任务调度
这些个理念
因此Google的MapReduce
它是更专注于数据流的问题
所以这个整个这个架构
看起来会更简单
所以我们先用它Google
这个是Google MapReduce
它的文章里头表现的一个架构
在Google的MapReduce里
实际上是
用户在自己的工作站
或者在自己登陆的那台服务器上
它起了一个运行了
一个MapReduce程序
这个MapReduce程序
记得它就是一个Map的函数
和一个Reduce的函数
跟它运行本地的程序
是一模一样的
那这个程序在启动之后
它会生成一个Master的进程
以及N多个Worker的进程
这个Master进程就负责管理
所有的运行的状态
它只负责处理
这个运行中的原数据
它只处理状态数据
它并不处理实际的数据
这没有任何的数据往它那流
所以它有一个Master就足够了
这跟那个GFS的namenode
或者是NTFS的Master是一个概念
Master负责管理任务 调度任务
所以 它把正常的
这些Worker分成两组
一部分跑Map
一部分跑Reduce
那么
它跟这个负责跑Map的Worker说
或者一个Worker当然可以
先跑Map后跑Reduce
这个都是可以来回调度的
但是每个时间
它或者跑Map 或者跑Reduce
那Master跟它说你来跑这个Map
那么Master告诉它什么
告诉它你要跑Map
你跑哪个Map函数
我把这个函数
已经传给你了
为什么传给它了
因为User Program
直接fork了这个Worker
所以它自己里头有那个Map的函数
那么Master告诉它说
你去怕Split0
那么Split0在GFS里的某一个位置
它把这个文件名传给它
那么它
就到GFS里头去把这个零号文件
或者零号文件里头的这一块
读过来
然后它就开始跑Map
那它刚才可能跟它说
是不是1也归你跑
可能是Map把Split1对应的
那一块也拿过来
这一个工具叫做读取的过程
读取数据的过程
这一块是用网络的
但是只用的是这个
相当于访问存储的这种
用网络的方式
那么之后
Worker把数据读取进来之后
它就会对在这数据上
调用这个Map的函数
另外函数用户写的
写出来的之后
它把Map函数的结果
当然调了Emit
Emit之后
它就会写成不同的shares
刚才我们讲到的
这些shares会写到它自己的硬盘上
所以它这一部叫local write
或者叫运行Map这么的一个过程
这么一个过程
当它的一个Map运行完了
那么它就写出来了一个short
就当一个Map运行完
只要它一个short一写完
那么这个Master就知道了
这个Map进行完了
那么Map的
记得Map是要比
这个worker要多很多的
所以Master会告诉它
你在进行其它的Map
但是在这个时候
反正它这个输出的
这个Map的输出这些shares
已经写好了
那么Reduce就开始运行了
这个Master就说
这儿有个shares写好了
你赶快把它读过来吧
所以这个Reduce就开始
做这个remote write的这个操作
就会把已经写好的
这些shares
它需要的那些
记住它是根据读哪个shares
是根据Reduce的编号来的
它读跟它编号一样的shares
它把那些个shaers
都拷贝到自己的硬盘上
当它把
认为这一个所有Map生成的
这个相关的shares
都拷过来之后
那么它就会自己做一个排序
生成了这个Reduce的file
它就是说做了一个排序
排序好了之后
它会针对排序
和组合出来的这个结果
它一次一次的
调用Reduce的这个函数
这个函数是用户写的
然后Reduce函数
最后一行是以Emit
这个Emit的时候
它就会把结果
直接写到输出的文件里头
输出的文件这个也是在GFS上
当然这个也是通过网络写了
写在GFS上
所以它最后
每一个Reduce输出的结果
就会变成GFS身上的一个文件
这个就是MapReduce
从数据上来讲是怎么运行的
所以这边是一个GFS
后边最后一个是一个GFS
它从GFS进从GFS出
中线的结果
中线的这边的操作和这边的操作
都是在本地的
中线只有一个数据交换
是通过网络的
这样稍后的这么一个过程
这里头并行化贯穿了
这里头的各个方面
首先各个Map是并行运行的
各个Reduce也是并行运行的
就算是Map和Reduce之间
它也想到了各种办法
能让它并发运行
比方说
我并不等着所有的Map都结束
我才做这个shares的过程
我是只要写出一个shares来
我就可以把shares
读到那个Reduce里头去
在这种情况下
它可以让网络的读取
不那么集中
而就是因为在Map的过程中
主要是CPU在计算嘛
然后在
(00:04:55)的过程中主要是网络
它可以让网络和CPU
之间有足够多的并行
并且所以整体的并行化的
这个思想贯穿了整个的
这个(00:05:05)
-授课视频
--什么是大数据
--大数据典型应用
--大数据的特点
--大数据技术体系
--大数据生态系统
--大数据技术挑战
--课程内容
-1. 绪论--Quiz 1
-授课视频
--2.2并行化理念
--2.9计算虚拟化
-2.云计算--Quiz 2
-授课视频
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
-3.文件存储--Quiz3
-授课视频
--4.13类似框架
--4.14章节总结
-4. 处理框架--Quiz4
-授课视频
-5.内存计算--Quiz5
-授课视频
--数据副本及一致性
--节点本地数据存储
-6. NoSQL--Quiz6
-授课视屏
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
--Video
-7. 流计算--Quiz7