Hadoop----MapReduce架构

MapReduce

MR原语:
输入(格式化k,v)数据集—>map映射成一个中间数据集(k,v)----> reduce----->输出一个(k,v)值输出
“相同”的key为一组,调用一次reduce方法,方法内迭代这一组数据进行计算。
Hadoop----MapReduce架构_第1张图片
MapReduce 内部处理流程大致为:
由HDFS 文件存储系统输出数据(block)经过(split)切片后形成以个(k,v)的数据格式传给Map函数,Map函数输出格式为(k,v,p)的数据格式,再跟进key值来sort 排序,形成一个个小的文件,缓存起来,当达到设定的阀值时会溢出(100M),根据key值的不同分别流向不同的 Reduce 所在Partition存储区,在Partition里进行排序,归并成一个文件来交给 Reduce 来处理,之后再以(k,v)键值对的形式,输出到HDFS文件储存系统中。
注意:一条记录一个Reduce 只能接受一个相同的 key 值,多个key值的数据可以由多个Reduce 处理,多个key值的数据也可以由一个Reduce 来处理。 这是它的原语。

Shuffler(洗牌) : 框架内部实现机制

分布式计算节点数据流转:连接MapTask与ReduceTask

Hadoop----MapReduce架构_第2张图片
Shuffler(洗牌)大致流程:

1 每个输入分片会让一个map任务来处理,默认情况下,以HDFS的一个块的大小(默认64M)为一个分片,当然我们也可以设置块的大小。map输出的结果会暂且放在一个环形内存缓冲区中(该缓冲区的大小默认为100M,由io.sort.mb属性控制),输出的数据是包括(k,v,p)的数据形式,根据不同的 p (分区)进行排序,形成多个小的文件,当该缓冲区快要溢出时(默认为缓冲区大小的80%,由io.sort.spill.percent属性控制),会在本地文件系统中创建一个溢出文件,将该缓冲区中的数据写入这个文件。

2 在写入磁盘之前,线程首先根据reduce任务的数目将数据划分为相同数目的分区,也就是一个reduce任务对应一个分区的数据。这样做是为了避免有些reduce任务分配到大量数据,而有些reduce任务却分到很少数据,甚至没有分到数据的尴尬局面。其实分区就是对数据进行hash的过程。然后对每个分区中的数据进行排序,如果此时设置了Combiner,将排序后的结果进行Combianer操作,这样做的目的是让尽可能少的数据写入到磁盘。

3 当map任务输出最后一个记录时,可能会有很多的溢出文件,这时需要将这些文件合并。合并的过程中会不断地进行排序和combiner操作,目的有两个:1、尽量减少每次写入磁盘的数据量;2、尽量减少下一复制阶段网络传输的数据量。最后合并成了一个已分区且已排序的文件。为了减少网络传输的数据量,这里可以将数据压缩,只要将mapred.compress.map.out设置为true就可以。

MR 框架的运行实例图
Hadoop----MapReduce架构_第3张图片
理解:
Map:
- 读懂数据
- 映射为KV模型
- 并行分布式
- 计算向数据移动
Reduce:
- 数据全量/分量加工
- Reduce中可以包含不同的key
- 相同的Key汇聚到一个Reduce中
- 相同的Key调用一次reduce方法
- 排序实现key的汇聚
K,V使用自定义数据类型
- 作为参数传递,节省开发成本,提高程序自由度
- Writable序列化:使能分布式程序数据交互
- Comparable比较器:实现具体排序(字典序,数值序等)

MR1.x 架构

运行架构:体现计算向数据移动
Hadoop----MapReduce架构_第4张图片
Hadoop----MapReduce架构_第5张图片
Hadoop----MapReduce架构_第6张图片
客户端向JobTracker提交一个作业,JobTracker把这个作业拆分成很多份,然后分配给TaskTracker(任务执行者)去执行,TaskTracker会隔一段时间向JobTracker发送心跳信息,如果JobTracker在一段时间内没有收到TaskTracker的心跳信息,JobTracker会认为TaskTracker死掉了,会把TaskTracker的作业任务分配给其他TaskTracker。

MRv1角色:

  • JobTracker
    • 核心,主,单点
    • 调度所有的作业
    • 监控整个集群的资源负载
  • TaskTracker
    • 从,自身节点资源管理
    • 和JobTracker心跳,汇报资源,获取Task
  • Client
    • 作业为单位(一个作业会启动一个客户端)
    • 规划作业计算分布资源(jar包,切片清单,配置信息)
    • 提交作业资源到HDFS
    • 最终提交作业到JobTracker(由JobTracker来调度,去哪个map去计算)

弊端:

  • JobTracker:负载过重,单点故障
  • 资源管理与计算调度强耦合,其他计算框架需要重复实现资源管理
  • 不同框架对资源不能全局管理

MR 2.X 架构(YARN)

Hadoop----MapReduce架构_第7张图片
Hadoop 2.X 机构 根本的思想是将 JobTracker 两个主要的功能分离成单独的组件,这两个功能是 资源管理和任务调度 / 监控。
新的资源管理器 YARN 全局管理所有应用程序计算资源的分配,每一个应用的 ApplicationMaster 负责相应的调度和协调。一个应用程序无非是一个单独的传统的 MapReduce 任务或者是一个 DAG( 有向无环图 ) 任务。ResourceManager 和每一台机器的节点管理服务器能够管理用户在那台机器上的进程并能对计算进行组织。
任务的调度和监控依然由 MapReduce 负责。

各个模块的说明

  • MapReduce On YARN:MRv2
  • 将MapReduce作业直接运行在YARN上,而不是由JobTracker和TaskTracker构建的MRv1系统中
  • 基本功能模块
    • YARN:负责资源管理和调度
    • MRAppMaster:负责任务切分、任务调度、任务监控和容错等
    • MapTask/ReduceTask:任务驱动引擎,与MRv1一致
  • 每个MapRduce作业对应一个MRAppMaster
    • MRAppMaster任务调度
    • YARN将资源分配给MRAppMaster
    • MRAppMaster进一步将资源分 配给内部的任务
  • MRAppMaster容错
    • 失败后,由YARN重新启动
    • 任务失败后,MRAppMaster重新申请资源

你可能感兴趣的:(数据分析)