大数据综合笔记

map reduce分析

参考文章

  1. Hadoop-2.4.1源码分析--MapReduce作业(job)提交源码跟踪
  2. Hadoop-2.4.1源码分析--MapReduce作业切片(Split)过程
  3. hadoop源码解析
  4. Hadoop中Map端源码解析
  5. Reduce Shuffle过程分析
image.png

流程

  1. job.waitForCompletion提交并监控作业
  2. job.submit中调用connet,跟集群建立连接并初始化。最后调用JobSubmitter.submitJobInternal来提交作业。
  3. JobSubmitter.submitJobInternal中,首先检查输出目录是否存在,如果存在将抛出异常,然后配置各种信息,获取文件,并调用writeSplites进行分片。最终以RecordReader reader的形式传到mapper中。
  4. 在mapper类中,启动了线程,监听context.nextKeyValue(),将输入的值传入map方法并调用。追踪可发现TaskInputOutputContext的实现类MapContextImpl的构造方法传入了RecordReader。
  5. map后,默认的情况下,Partitioner将对结果按照key进行分区、排序、溢写磁盘。有相同key的键/值对会送到同一个Reducer,一个分区由一个reduce来处理,如果reduce数不够时,分区将等待前置reduce处理完后再提交到reduce。分区调用是在NewOutputCollector.write中。自定义分区方法
  6. map阶段,分片、map初始化、分区等都是由MapTask.runNewMapper来实现的。
  7. Shuffle过程是Reduce阶段的初始操作阶段,过程简单的理解就是"远程数据拷贝"的过程。将maptask输出的处理结果数据,分发给reducetask,并在分发的过程中,对数据按key进行了分区和排序。具体实现查看Shuffle.run()。
  8. reduce阶段,将取出key相同的group调用定义的reduce方法,最后将结果写到设定的目录下。
    MapReduce中,分片、分区、排序和分组(Group)的关系图:


    mapreduce流程图
mapstak流程图
shuffle流程图
image.png

image.png

yarn 分析

yarn是通过ResourceManager来管理和分配集群的资源

image.png
  1. ResourceManager,负责集群中所有资源的统一管理和分配。ResourceManager主要包含Scheduler和ApplicationManager两部分。Scheduler负责这个集群资源的分配和调度,ApplicationManager负责接收作业的提交,从Scheduler中获取资源并分配给应用,监控作业进度,对失败的作业进行重启。Scheduler有三种调度方式:
    1.1 FIFO Scheduler,先进先出,以作业提交的先后顺序进行调度。
    1.2 Capacity Scheduler,根据应用自身的的逻辑分配资源。
    1.3 Fair Scheduler,公平调度,尽可能让各个作业得到的资源平均。
image.png
  1. NodeManager,管理着单个计算节点,负责跟resourcemanager保持通讯,启动关闭节点,监控节点的资源使用情况(CPU、内存、磁盘、网络等),监控节点的健康情况。

你可能感兴趣的:(大数据综合笔记)