大数据笔记05--MapReduce

什么是MapReduce

Hadoop MapReduce is a software framework for easily writing applications which process vast amounts of data (multi-terabyte data-sets) in-parallel on large clusters (thousands of nodes) of commodity hardware in a reliable, fault-tolerant manner.
MapReduce是一个软件框架,用于简单地书写并行处理海量数据(数TB的数据)的应用,在标准服务器搭建的大型的集群(数千个节点)上,以一种可靠的,容错的方式。

MR的主要思想

MR主要思想:分久必合

MapReduce是由两个阶段组成:
Map端
Reduce端

MR核心思想:“相同”的key为一组,调用一次reduce方法,方法内迭代这一组数据进行计算

MR分布式计算原理

在这里插入图片描述

处理流程

map task

  1. 假设需要处理的文件存在HDFS中(以block的形式)
  2. 文件以split切片的形式输入进map函数进行处理
    split默认和block同样大小,是一种逻辑上的存储结构。实际在划分时,一条数据可能被切分在两个block中,split会将这条数据在下一个block中的部分抽取出来补充完整,所以实际的split大小可能略大或略小于block。一个split对应一个map。
  3. map一条一条的读取数据(以(偏移量,值)KV对的形式)
    偏移量,即索引号,从0开始,若第一条数据所占字节数N,则下一行的偏移量即key从N+1开始,以此类推
  4. map将处理后的结果输出到memory的buffer中(自定义的key,处理后的value),并在输出时为每一条记录打上标签,即分区号
    目的:为了让这条数据知道将来被哪一个reduce处理
    分区是由分区器进行的,默认的分区器是HashPartitioner
    分区的策略:根据key的hashcode与reduce的个数取模,根据取模结果分组
  5. 数据一条一条的写入buffer,一旦写入到80M,就会将数据溢写到磁盘上
    到80M时,内存会将这80M封锁,对内存中的数据进行combiner(小聚合),并根据分区号、key进行排序,写到磁盘上的是一个文件内分好区,区内有序的小文件。
    封锁内存时由剩余的20M内存继续接收map的输出
    每一次溢写会产生一个小文件
  6. map task全部计算完毕后,会将磁盘上的小文件合并为一个大文件
    合并的时候会进行combiner,并采用归并排序的算法,将众多小文件合成一个内部分区且分区内有序的大文件

reduce task

  1. reduce task从map端读取对应分区的数据,写入到内存中,内存写满就溢写到磁盘上
    写策略与map端相同,默认情况下内存为660M,封锁后可用内存为40M 。溢写前也会进行排序,当把所有的数据取过来后,会将溢写产生的小文件归并排序并合并。
  2. 每一组数据(key相同)调用一次reduce函数计算产生结果

总结

  • 共执行两次combiner,四次排序,目的都是为了最后提高分组的效率
  • 数据从Map出到进入Reduce的过程称为Shuffle
    Shuffle内包含combiner(小聚合)、spill(溢写)、merge(合并)
  • 在map task的阶段称为shuffle write,在reduce task的阶段称为shuffle read
    即Map ==> Shuffle write | | Shuffle read ==> Reduce

MR应用的执行流程

MapReduce框架 ⇒ Application ⇒ 资源调度器 ⇒ 任务调度器 ⇒ 分布式并行计算

Hadoop 1.x

在hadoop 1.x版本,MapReduce自带资源管理器JobTracker,同时担任任务调度器

流程图

在这里插入图片描述

角色

  • JobTracker
    核心,主,单点
    调度所有的作业
    监控整个集群的资源负载
  • TaskTracker
    从,自身节点资源管理
    和JobTracker心跳,汇报资源,获取Task
  • Client
    作业为单位
    最终提交作业到JobTracker

弊端:

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

Hadoop 2.x

Hadoop 2.0新引入的资源管理系统YARN(Yet Another Resource Negotiator)
YARN的引入,使得多个计算框架可运行在一个集群中,其他框架应用程序只需实现yarn的ApplicationMaster
目前多个计算框架可以运行在YARN上,比如MapReduce、Spark、Storm等

核心思想:

将MRv1中JobTracker的资源管理和任务调度两个功能分开,分别由ResourceManager和ApplicationMaster进程实现

流程图

在这里插入图片描述

  • client会获取到每一个block的(三个)位置,此时若判断这三个位置上资源不够,则获取同机架上一个节点,若同机架上没有空闲节点,则获取一台随机节点。
  • yarn-child会向AM返回任务进度信息,再返回给客户端展示实时进度
  • map task运行完产生大文件传输到reduce中,reduce应在同一个节点上

角色

  • ResourceManager
    负责整个集群的资源管理和调度
  • ApplicationMaster
    负责应用程序相关的事务,比如任务调度、任务监控和容错等
    每个MapRduce作业对应一个AppMaster
    YARN将资源分配给AppMaster
    AppMaster进一步将资源分配给内部的任务
  • NodeManager
    与RM汇报资源
    管理Container生命周期
  • Container
    是申请的资源,不是进程
    由NodeManager启动线程监控Container大小
  • Client
    请求资源创建AM
    与AM交互

容错机制

AppMaster失败后,由YARN重新启动
任务失败后,AppMaster重新申请资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值