云计算(1.2)Google云计算三大核心技术 - 分布式数据处理MapReduce
前言GFS解决了Google的大数据存储问题针对大数据进行计算并获得预期结果的技术就是MapReduceGoogle的MapReduce不开源后面可以通过使用Hadoop MapReduce深入理解MapReduce对于Google搜索,一次简单的搜索也就是一个请求,在云端需要大量的计算最终返回结果如何进行分布式计算?如何进行并行计算?如何处理分布式计算中的错误?Googl...
前言
GFS解决了Google的大数据存储问题
针对大数据进行计算并获得预期结果的技术就是MapReduce
Google的MapReduce不开源
后面可以通过使用Hadoop MapReduce深入理解
MapReduce
对于Google搜索,一次简单的搜索也就是一个请求,在云端需要大量的计算最终返回结果
- 如何进行分布式计算?
- 如何进行并行计算?
- 如何处理分布式计算中的错误?
Google的分布式数据处理技术MapReduce给了答案
MapReduce模型
MapReduce将复杂的、运行于大规模集群上的并行计算过程高度地抽象到了两个函数:Map和 Reduce
所以编程简洁,只需要完成Map()、Reduce()函数就可以实现分布式技术
MapReduce处理数据的策略:一个存储在分布式文件系统中的大规模数据集,会被切分成 许多独立的分片(split),这些分片可以被多个Map任务并行处理,再通过Reduce操作输出预期的数据,也是分布式的
MapReduce实现机制
MapReduce体系结构主要由四个部分组成,分别是:Client、JobTracker、TaskTracker以及Task
-
Client:
用户编写的MapReduce程序通过Client提交到JobTracker端,用户可通过Client提供的一些接口查看作业运行状态 -
JobTracker :
负责资源监控和作业调度,JobTracker会监控所有TaskTracker与Job的健康状况,一旦发现失败,就将相应的任务转移到其他节点,JobTracker会跟踪任务的执行进度、资源使用量等信息,并将这些信息告诉任务调度器(TaskScheduler),而调度器会在资源出现空闲时,选择合适的任务去使用这些资源 -
TaskTracker:
TaskTracker 会周期性地通过“心跳”将本节点上资源的使用情况和任务的运行进度汇报JobTracker,同时接收JobTracker发送过来的命令并执行相应的操作(如启动新任务、杀死任务等),TaskTracker使用“slot”等量划分本节点上的资源量(CPU、内存等)。一个Task 获取到一个slot 后才有机会运行,而Hadoop调度器的作用就是将各个TaskTracker 上的空闲slot分配给Task使用。slot 分为Map slot 和Reduce slot 两种,分别供 MapTask 和Reduce Task 使用 -
Task:
Task 分为Map Task 和Reduce Task 两种,均由TaskTracker 启动
执行阶段
- Split(分片)
HDFS(Hadoop File System,GFS的开源实现)以block数据块作为基础存储单元,HDFS组装成file,对于MapReduce的处理单元是Split,Split 是一个逻辑概念,它只包含一些元数据信息,比如数据起始位置、数据长度、数据所在节点等,split的划分方法完全由用户自己决定
- Map任务的数量
Hadoop为每个split创建一个Map任务(Map Task),split 的多少决定了Map任务的数目。 大多数情况下,理想的分片大小是一个HDFS块 - Reduce任务的数量
最优的Reduce任务个数取决于集群中可用的reduce任务槽(slot)的数目,通常设置比reduce任务槽数目稍微小一些的Reduce任务个数(这样可以预留 一些系统资源处理可能发生的错误) - Shuffle
当所有的map task完成后,每个map task会形成一个最终文件,并且该文件按区划分。reduce任务启动之前,一个map task完成后, 就会启动线程来拉取map结果数据到相应的reduce task,不断地合并数据,为reduce的数据输入做准备,当所有的map tesk完成后, 数据也拉取合并完毕后,reduce task 启动
Shuffle的过程:描述数据从map task输出到reduce task输入的这段过程
Shuffle过程
shuffle过程,是指对Map输出结果进行分区、排序、合并等处理并交给Reduce的过程,因此Shuffle过程可以分为Map端的操作和Reduce端的操作
-
Map端操作
Map端操作就是将Map Task分配缓存,溢写归并Map数据 -
Reduce端操作
Reduce端操作领取Map数据放入缓存归并合并,输出给Reduce
更多推荐
所有评论(0)