概述
Mapreduce是一种分布式并行编程:借助一个集群通过多台机器同时并行处理大规模数据集。
Mapreduc模型简介
Mapreduce采用分而治之的方法实现,把非常庞大的数据集,切分成非常多的独立的小片,然后单独的启动一个Map任务,最终通过多个map,并行的在多个机器上去处理
Mapreduce理念
计算向数据靠拢而不是数据向计算靠拢
要完成一次数据分析,选择一个计算节点把运行数据分析的程序放到计算节点上运行;然后把它所涉及的数据,全部从各个节点面上拉过来,传输到计算发生的地方。
Mapreduce采用了Master/slave架构:一个Master服务器个若干个slave服务器。Master上与新作业跟踪器jobTracker,slave服务器负责基本任务的组件TaskTracker.
Mapreduce的体系结构
- client【客户端】:
- 通过client可以提交用户编写的应用程序用户通过它将应用程序交到jobTracker端,通过这些client用户也可以提供一些借口去检查看当前提交作业的运行状态。
- jobTracker【作业跟踪器】:
- 负责组员的监控和作业大的调度
- 监控底层的其他TaskTracker以及当前运行的job的健康状况
- 一旦检测到失败的情况就把这个任务转移到其他节点继续执行跟踪任务执行进度和资源使用量。
- TaskTracker【任务调度器】:
- 执行具体的相关任务一般接受jobTracker发送过来的命令
- 会把自己一些资源使用情况,以及任务的运行进度通过心跳【heartbeat】发送给jobTracker
- TaskTracker使用‘slot’等量划分本节点上的资源量(淳朴,内存等),一个task获取到一个slot后才有机会运行,而hadoop调度器的作用是将各个TaskTracker上的空闲slot分配到Task使用。slotf分为Map slot和Reduce slot两种,分别供MapTask 和ReduceTask使用
- Task【任务】
- Task分为Map Task和Reduce Task两种,均有TaskTracker启动。
Mapreduce的工作流程
一个应用程序要执行大规模数据处理分析,首先大规模数据集保存在这分布式文件系统HDFS中,分块存储么把它分布式的存储在不同节点上去,未来实现大规模的数据集,一般会进行分片操作,把大的数据结构切分成许多小片【split】,然后每一分片单独执行一个map任务,让他去处理这些分片,这些map任务输入都是key和value,输出也是key和value,把这对key,value发送到不同的reduce上进行后续的处理,因为要进行并行出的操作,所以map任务输出的结果是需要分成很多区的,分配给不同的reduce.map分区的数量取决于reduce任务的数量。处理结束后,把结果输入到分布式文件系统HDFS中。
- 在上图通信过程中,不同的map任务之间是不会进行通信的
- 同时不同的reduce之间也不会进行信息交换
- 用户也不能显示的有一台机器向另外一台机器传输信息
- 所有的数据交换都是通过Mapreduce框架去实现的。