今天我们开始学习新的篇章MapReduce 系列知识,所以本期带来的是大数据开发-MapReduce ,MapReduce作为一种编程模型,它是如何将自己的功能发挥到极致,以此提高工作效率的呢?下面就一起来看。
一、MapReduce简介
MapReduce 是一个高性能的分布式计算框架,用于大规模数据集(大于1TB)的并行运算。它极大的方便编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上。MapReduce分为Map(映射)和Reduce(化简)两个阶段,是在HDFS存储数据的基础上,将一个较大的计算任务(job)分解成若干小任务(task),每个小任务都由一个Map任务(task)来计算(这个Map尽量在数据所在节点上完成计算),然后再将每个Map的计算结果由一个或多个Reduce任务(task)合并,得到最终的结果。它的火热发展也得感谢GOOGLE,当初GOOGLE将几篇关于MapReduce的文章发布出来之后,就一炮而红,Hadoop的思想源于Google的几篇论文,提出来分布式计算框架MapReduce。
二、MapReduce结构
MapReduce由Client、JobTracker、TaskTracker、Task组成
1.Client
用户编写的MapReduce程序通过Client提交到JobTracker端 用户可通过Client提供的一些接口查看作业运行状态
2.JobTracker
JobTracker负责资源监控和作业调度 JobTracker 监控所有TaskTracker与Job的健康状况,一旦发现失败,就将相应的任务转移到其他节点 JobTracker 会跟踪任务的执行进度、资源使用量等信息,并将这些信息告诉任务调度器(TaskScheduler),而调度器会在资源出现空闲时,选择合适的任务去使用这些资源
3.TaskTracker
TaskTracker 会周期性地通过“心跳”将本节点上资源的使用情况和任务的运行进度汇报给JobTracker,同时接收JobTracker 发送过来的命令并执行相应的操作, TaskTracker 使用“slot”等量划分本节点上的资源量(CPU、内存等)。一个Task 获取到一个slot 后才有机会运行,而Hadoop调度器的作用就是将各个TaskTracker上的空闲slot分配给Task使用。slot 分为Map slot 和Reduce slot 两种,分别供MapTask 和Reduce Task 使用
4.Task
Task 分为Map Task 和Reduce Task 两种,均由TaskTracker 启动
说完了结构那我们就仔细看看它是怎么进行操作过程的。
三、MapReduce 的执行流程
通过将输入数据划分为 M 个分片, map 函数的调用分布在多台机器上,这些分片可与不同的机器并行地处理。通过将中间结果的键空间划分为 R 个分片, reduce 函数的调用分布在多台机器上。
下图展示了 MapReduce 操作的整个流程。
1.客户程序中的 MapReduce 库首先将输入文件分成 M 个大小通常为 16MB 或者64MB 的分片,然后开始在集群上的机器复制客户程序。
2.其中有一个程序的备份是特殊的,它就是主节点。其它的是由主节点分配任务的从节点,主节点有 M 个 map 任务和 R 个 reduce 任务要分配给那些空闲的从节点。
3.一个被分配了 map 任务的从节点从输入分片中读取内容,然后从输入中解析出键值对被传递给用户定义的 map 函数,由它来产生中间结果的键值对并缓存在内存中。
4.在内存中的键值对被周期性地写入到本地磁盘,通过分片函数被分成 R 个分片。这些分片的位置被回传给主节点,由主节点告诉 reduce 从节点它们的位置。
5.当 reduce 从节点被主节点告知分片的位置时,它从使用 RPC(remote procedure call) 去读取那些缓存数据,当读完后,它会按键值进行排序,然后将有相同键值的键值对组合在一起,形成键/值列表。
6.reduce 从节点遍历已经排序合并好了的中间数据,将每一个键/值列表对传递给客户定义的 reduce 函数。reduce 函数返回的结果被添加到这个 reduce 从节点的结果文件中。
7.当所有 map 从节点和 reduce 从节点完成后,主节点唤醒客户程序。如果 MapReduce 程序成功完成,结果文件被存储在 R 个输出文件中。
以上就是本期的内容了,Hadoop系列知识之前说过会占很多,今天MapReduce也是属于Hadoop的知识体系,希望大家能好好理解。
希望大家点个关注,及时收取最新文章推送,想了解更多敬请咨询加米谷大数据。
有问题的欢迎在评论区留言,如有侵权请告知。