一、MapReduce概述
MapReduce:是一种分布式并行编程框架。
MapReduce的理念:
1、计算向数据靠拢而不是数据向计算靠拢
二、MapReduce体系结构
1、client(客户端)
通过client可以提交用户编写的应用程序,用户通过它将应用程序交到 jobtracker 端;
通过这些client,用户也可以通过它提供的一些接口去查看当前提交作业的运行状态。
2、jobtracker(作业跟踪器)
(1)负责资源的监控和作业的调度;
(2)监控底层的其它的 tasktracker 以及当前运行的job的健康状况;
(3)一旦探测到失败的情况就把这个任务转移到其它节点继续执行跟踪任务执行进度和资源使用量。
3、tasktracker(任务调度器)
(1)执行具体的相关任务,一般接收jobtracker发送过来的命令;
(2)把一些自己的资源使用情况,以及任务的运行进度通过心跳的方式,也就说heartbeat发送给jobtracker。
三、MapReduce工作流程
mapreduce和hdfs组合使用。
inputformat将数据进行逻辑分片,由RR进行读取处理,将数据输出为<key,value>格式,通过shuffle将数据处理后分发给reduce进行处理分析,输出<key,value>,输出到分布式文件系统。
1、分片
分多少片,就会有多少个map任务。分片大小通常将一个块的大小作为一个分片,每个块冗余存储在多个数据节点中。
reduce任务的数量:最优的任务个数取决于集群中可用的reduce任务槽的数目;通常设置比reduce任务槽数据稍小一些的reduce任务个数,这样可以预留一些系统资源处理可能发生的错误。
2、shuffle过程
(1)map端的shuffle过程
map输出任务首先放入缓存中,写满缓存就启动溢写进程(溢写比),溢写到磁盘。
(2)reduce端的shuffle过程
四、MapReduce应用程序的执行过程
MapReduce实例:
1、key是行号,value是内容
2、
定义combine函数时的情况:
MapReduce具体应用:用MapReduce实现关系表的自然连接