shuffle流程

  1. 输入分片(input split):在进行map计算之前,mapreduce会根据输入文件计算输入分片(input split),每个输入分片(input split)针对一个map任务,输入分片(input split)存储的并非数据本身
  2. map阶段:就是程序员编写好的map函数了,因此map函数效率相对好控制,而且一般map操作都是本地化操作也就是在数据存储节点上进行;
  3. combiner阶段:combiner阶段是程序员可以选择的,combiner其实也是一种reduce操作。例如:如果计算只是求总数,最大值,最小值可以使用combiner,但是做平均值计算使用combiner的话,最终的reduce计算结果就会出错。
  4. shuffle阶段:将map的输出作为reduce的输入的过程就是shuffle了,这个是mapreduce优化的重点地方。
    1. map在做输出时候会在内存里开启一个环形内存缓冲区,默认大小是100mb
    2. map启动一个守护线程,如果缓冲区的内存达到了阀值的80%(默认)时候,这个守护线程就会把内容写到磁盘上,这个过程叫spill,另外的20%内存可以继续写入要写进磁盘的数据,写入磁盘和写入内存操作是互不干扰的,如果缓存区被撑满了,那么map就会阻塞写入内存的操作,让写入磁盘操作完成后再继续执行写入内存操作
    3. 写入磁盘前会有个排序操作,这个是在写入磁盘操作时候进行,不是在写入内存时候进行的,++如果我们定义了combiner函数,那么排序前还会执行combiner操作
    4. 每次spill操作就会产生一个溢出文件,等map输出全部做完后,map会合并这些输出文件。
  5. patitioner:一个Partitioner对应一个reduce作业,Partitioner因此就是reduce的输入分片,这个程序员可以编程控制,主要是根据实际key和value的值,根据实际业务类型或者为了更好的reduce负载均衡要求进行。到了reduce阶段就是合并map输出文件了,Partitioner会找到对应的map输出文件,然后进行多线程复制操作,复制时还会进行排序和合并文件,复制和map输出文件类似。(用户可以选择多种哦partitioner,hash或者有序)
  6. reduce阶段:和map函数一样也是程序员编写的,最终结果是存储在hdfs上的。

容错

任务出错

任务出错是比较常见的,引起错误的原因通常有低质量的代码、数据损坏、节点暂时性故障、一个任务出现下列三种情况的任意一种时被认为出错。

  1. 抛出一个没有补货的异常
  2. 以一个非零值退出程序
  3. 在一定的事件内没有向Tasktracker报告进度。
    1. 任务重试
    2. 多次在同一个taskTracker失败,把taskTracker加入黑名单
  4. 当一个任务经过最大尝试数的尝试运行后仍然失败,那么整个作业将被标记为失败。如果我们不希望这样(因为可能作业的溢写结果还是可用的),那么可以设置允许在不处罚整个作业失败的任务失败的最大百分比。

TaskTracker出错

当TaskTracker进程崩溃或者TaskTracker进程所在节点故障时,JobTracker将接收不到TaskTracker发来的心跳,那么JobTracker将会认为该TaskTracker失效并且在该TaskTracker运行过的任务都会被认为失败,这些将会被重新调度到别的TaskTracker执行,而对于用户来说,在执行MapReduce任务时,只会感觉到该作业在执行的一段时间里变慢了。

  1. TaskTracker出错发生在Map阶段,因为Reduce需要所有Map阶段的数据,所以需要重新执行分配在Tasktracker上的所有任务(包括已经执行的)。

  2. TaskTracker出错发生在Reduce阶段,因为Reduce任务都把结果输出到HDFS中,只需要重新执行未执行的Reduce任务。

JobTracker出错

在Hadoop中,JobTracker出错是非常严重的额情况,因为在Hadoop中JobTracker存在单节点故障的可能性,所以如果如果JobTracker一旦出错,那么正在运行的所有作业的内部状态信息将会丢失,即使JobTracker马上恢复了,作业的所有任务都会被认为是失败的,即所有作业都需要重新执行。

任务调度

提供3种类型的调度器

  • FIFO调度器
  • 容量调度器
  • 公平调度器

由于有Yarn的存在,这3中调度器只关注于任务调度,如何从不同的队列中选择一个应用,好像FIFO就可以了。

Hadoop MapReduce流程及容错的更多相关文章

  1. Hadoop Mapreduce运行流程

    Mapreduce的运算过程为两个阶段: 第一个阶段的map task相互独立,完全并行: 第二个阶段的reduce task也是相互独立,但依赖于上一阶段所有map task并发实例的输出: 这些t ...

  2. Hadoop(17)-MapReduce框架原理-MapReduce流程,Shuffle机制,Partition分区

    MapReduce工作流程 1.准备待处理文件 2.job提交前生成一个处理规划 3.将切片信息job.split,配置信息job.xml和我们自己写的jar包交给yarn 4.yarn根据切片规划计 ...

  3. Hadoop之MapReduce流程

    hadoopMapReduce 1. MapReduce流程 2. Shuffle流程 1. MapReduce流程 MapReduce流程 切片: 对数据进行逻辑划分,默认大小是一个block块大小 ...

  4. Hadoop Mapreduce刮

    前言 的一个渣渣程序猿一枚,因为个人工作,须要常常和hadoop打交道,可是自己之前没有接触过hadoop.所以算是边学边用,这个博客算是记录一下学习历程,梳理一下自己的思路,请各位看官轻拍.本博客大 ...

  5. [转载] Hadoop MapReduce

    转载自http://blog.csdn.net/yfkiss/article/details/6387613和http://blog.csdn.net/yfkiss/article/details/6 ...

  6. hadoop MapReduce

    简单介绍 官方给出的介绍是hadoop MR是一个用于轻松编写以一种可靠的.容错的方式在商业化硬件上的大型集群上并行处理大量数据的应用程序的软件框架. MR任务通常会先把输入的数据集切分成独立的块(可 ...

  7. 【Big Data - Hadoop - MapReduce】hadoop 学习笔记:MapReduce框架详解

    开始聊MapReduce,MapReduce是Hadoop的计算框架,我学Hadoop是从Hive开始入手,再到hdfs,当我学习hdfs时候,就感觉到hdfs和mapreduce关系的紧密.这个可能 ...

  8. 谈谈Hadoop MapReduce和Spark MR实现

    谈谈MapReduce的概念.Hadoop MapReduce和Spark基于MR的实现 什么是MapReduce? MapReduce是一种分布式海量数据处理的编程模型,用于大规模数据集的并行运算. ...

  9. Hadoop MapReduce执行过程详解(带hadoop例子)

    https://my.oschina.net/itblog/blog/275294 摘要: 本文通过一个例子,详细介绍Hadoop 的 MapReduce过程. 分析MapReduce执行过程 Map ...

随机推荐

  1. mysql中设置默认字符编码为utf-8

    使用过Linux的同志就知道,在Linux下安装mysql,尤其是使用yum安装的时候,我们是没法选择其默认的字符编码方式.这个就是一个比较头痛的问题,如果Linux数据库中使用到中文的时候,乱码问题 ...

  2. C# 调用C++ CLR dll类库时,实现从 string 到 sbyte* 的转换

    问题描述 今天在做项目的时候碰到一个问题,就是用C++编写CLR类库dll的时候,C++的函数参数列表中包含一个char*的输出型参数,然而在C#调用该dll时候,会自动将函数的中的char*参数“翻 ...

  3. GitLab使用自定义端口

      Git支持两种地址访问方式,一种是:使用ssh协议,另一种是:使用http协议.   今天在部署Git服务器拉取和上传代码是出现了以下问题ssh: connect to host gitlab.d ...

  4. linux系统编程之进程(三):进程复制fork,孤儿进程,僵尸进程

    本节目标: 复制进程映像 fork系统调用 孤儿进程.僵尸进程 写时复制 一,进程复制(或产生)      使用fork函数得到的子进程从父进程的继承了整个进程的地址空间,包括:进程上下文.进程堆栈. ...

  5. 编程哲学之C#篇:02——学习思维

    <代码大全>的第二章:介绍隐喻(类比)的思维方式, <经济学原理>的第二章:介绍怎么像经济学家一样思考, <计算机的心智操作系统之哲学原理>的第一章:介绍学习操作系 ...

  6. Python常用第三方模块(长期更新)

    1.keyboard #监控键盘 2.PIL#处理图片 3.operator #操作列表 4.shelve #数据存储方案 保存dat文件 5.optparse #处理命令行参数 6.configpa ...

  7. Android 流媒体播放 live streaming

    安卓支持的协议 RTSP (RTP, SDP)HTTP/HTTPS progressive streamingDynamic adaptive streaming on HTTP => MPEG ...

  8. day 81 天 ORM 操作复习总结

    # ###############基于对象查询(子查询)############## 一.对多查询  正向查询 from django.shortcuts import render,HttpResp ...

  9. Day 41 线程

    进程只能在同一个时间干一件事情,如果想同时干两件或者多件事情,进程就无能为力了. 进程在执行过程中如果阻塞,整个进程就会挂起,即使进程中有些工作不依赖于输入的数据,也将无法执行. 一是由于进程是资源的 ...

  10. IAP远程在线升级

    IAP远程在线升级 在上一篇中实现了LWIP网口通讯,那么肯定要加个在线升级功能,这个功能所占用的资源很少,但在物联网中很重要也很实用.在线升级就是像手机一样,先下载好系统,然后点击升级~然后就没然后 ...