MapReduce错误处理,任务调度及Shuffle过程

错误处理

出现错误主要有以下三种:

1、Task任务

2、JobTracker失败

3、TaskTracker失败

Task任务

1、当map或者reduce子任务中的代码抛出异常,JVM进程会在退出之前向服务tasktracker进程发送错误报告,tasktracker会将此(任务尝试)taskattempt标记为failed状态,释放一个槽以便运行另外一个任务

2、对于流任务,如果流进程以非零退出运行,则会标记为failed。

3、子JVM突然退出(JVM错误),这时tasktracker会注意到进程己经退出,标记为failed。

4、tasktracker将子任务标记为失败后会将自身计数器减一,以便向jobtracker申请新的任务,也是通过心跳告知jobtracker本地的一个任务尝试失败。

5、jobtracker接到任务失败的通知后,会将其重新加入到调度队列重新分配给其他的tasktracker执行(避免将失败的任务分配给执行失败的tasktracker),但是这个尝试也是有次数限制的,默认情况卜任务尝试4次后仍然没有完成,就不会再重试(jobtracker会将其标记为killed),此时整个作业就执行失败了。

TaskTracker失败

1、tasktracker一旦失败,就会停止向jobtracker发送心跳。

2、同时jobtracker从任务池中将此tasktracker删除,tasktracker上运行的任务将会被移送到其他tasktracker节点上去运行。

3、如果每个tasktracker上面的任务失败次数远远高于其他节点,jobtracker就把该tasktracker放入到黑名单中。

4、如果成功完成的map任务,tasktracker节点已经失效了,那么reduce任务也无法访问到存储在tasktracker本地文件系统上的中间结果,需要在其他tasktracker节点重新被执行。

JobTracker失败

1)JobTracker失败是最严重的一种失败方式了,而在Hadoop1.x中存在单点故障的情况下是相当严重的。

2)可以通过启动多个JobTracker,在这种情况只运行一个主的jobtracker,主的jobtracker由zookeeper协调控制。但是出现故障的概率仍然比较高,因此,Hadoop2.x采用了一种全新的架构Yarn。将作业调度和任务管理完全剥离出来。

作业调度

先进先出调度器(FIFO)默认方式

公平调度器(FairScheduler)

容量调度器(CapacityScheduler)

先进先出调度器(FIFO)

1、FIFO调度器是hadoop中默认的调度器,它先遵循优先级优先,然后按照作业到来的顺序进行调度

2、这种默认的调度器的一个缺点是:高优先级以及需要长时间运行的作业一直在被处理,而低优先级以及短作业将长时间得不到调度。

公平调度器(FairScheduler)

由fackbook开发的调度器。

1、FairScheduler的目标是让每个用户公平的共享集群

2、作业被放在池中,在默认情况下,每个用户都有自己的池。

3、支持抢占,如果一个池在特定的时间内未得到公平的资源分配,调度器就会终止运行池中得到过多的资源的任务,以便把任务槽让给资源不足的池。

容量调度器(CapacityScheduler)

由雅虎开发的调度器。

1、支持多个队列,每个队列可以配置一定的资源量,每个队列采用FIFO调度策略。

2、为了防止同一个用户提交的作业独占队列中的资源,对同一个用户提交作业所占的资源量进行限定

3)具有的特性:层次化的队列、资源容量保证、安全性、弹性、可操作性、基于资源的调度。

配置FairScheduler

1、修改mapred-site.xml

<property>
    <name>mapred.jobtracker.taskScheduler</name>
    <value>org.apache.hadoop.mapred.FairScheduler</value>
</property>
<property>
    <name>mapred.fairscheduler.allocation.file</name>
    <value>$HADOOP_HOME/conf/fair-scheduler.xml</value>
</property>

2、fair-scheduler.xml

以上是hadoop1.x的相关操作。

hadoop2.x对yarn-site.xml进行配置可以参考官网

http://hadoop.apache.org/docs/r2.6.0/hadoop-yarn/hadoop-yarn-site/FairScheduler.html

Hadoop YARN 附带的默认调度器是CapacityScheduler。

shuffle和sort

map端

1、map端并不是简单的把中间结果写入到磁盘,而是利用环形缓冲区的方式先把map输出到内存当中。

2、每个map都有一个环形缓冲区,默认大小100M,大小可以由属性io.sort.mb来修改。

3、一旦内存缓冲区达到一个溢写阀值。(io.sort.spill.percent),就会新建一个溢写文件

4、多个溢写文件最终会合并成一个己分区已排序大的输出文件,写入到磁盘中,作为reduce的输入。

5、io.sort.factor控制着一次最多可以合并多少个分区。

reduce端

1、reduce端shuffle过程,分为三个阶段:复制map输出、排序合并和reduce处理。

2、由于reduce可以接收多个map的输出,所以复制map输出阶段的时候仍然需要在本地排序并合并。

3、map任务可以在不同时间完成,囚此只要有一个map任务结束,reduce任务就开始复制其输出。

4、reduce任务有少量的复制线程,可以并行取得map输出。

mapred.reduce.parallel.copies属性来控制)

5、reduce处理阶段不会等待所有输入合并成一个大文件后进行处理,而是把部分合并后的结果直接进行处理

时间: 2024-10-09 11:45:12

MapReduce错误处理,任务调度及Shuffle过程的相关文章

MapReduce的shuffle过程

本文是学习时的自我总结,用于日后温习.如有错误还望谅解,不吝赐教. 此处附上一篇个人认为写的比较好的博客,转自枝叶飞扬的博文:http://blog.sina.com.cn/s/blog_605f5b4f010188lp.html### 将Map的输出作为Reduce的输入的过程就是Shuffle了,这个是MapReduce优化的重点地方 Shuffle 过程 ①   Map在内存中开启一个默认大小100MB的环形内存缓冲区用于输出 ②   当缓冲区内存达到默认阈值 80% 时,Map 会启动守

MapReduce:详解Shuffle过程

MapReduce:详解Shuffle过程[转] 博客分类: mapreduce MapreduceITeye数据结构多线程Hadoop Shuffle过程是MapReduce的核心,也被称为奇迹发生的地方.要想理解MapReduce, Shuffle是必须要了解的.我看过很多相关的资料,但每次看完都云里雾里的绕着,很难理清大致的逻辑,反而越搅越混.前段时间在做MapReduce job 性能调优的工作,需要深入代码研究MapReduce的运行机制,这才对Shuffle探了个究竟.考虑到之前我在

MapReduce Shuffle过程详解

Shuffle过程是MapReduce的核心,也被称为奇迹发生的地方.要想理解MapReduce,Shuffle是必须要了解的.我看过很多相关方面的资料,但每次看完都云里雾里的绕着,很难理清大致的逻辑,反而越搅越乱.前端时间在做MapReduce job性能调优的工作,需要深入代码研究MapReduce的运行机制,这才对Shuffle探了个究竟.考虑到之前我在看相关资料而看不懂时很恼火,所以在这里我尽最大的可能试着把Shuffle说清楚,让每一位想了解它原理的朋友都能有所收获.如果你对这篇文章有

【转】MapReduce:详解Shuffle过程

——转自:{http://langyu.iteye.com/blog/992916} Shuffle过程是MapReduce的核心,也被称为奇迹发生的地方.要想理解MapReduce, Shuffle是必须要了解的.我看过很多相关的资料,但每次看完都云里雾里的绕着,很难理清大致的逻辑,反而越搅越混.前段时间在做MapReduce job 性能调优的工作,需要深入代码研究MapReduce的运行机制,这才对Shuffle探了个究竟.考虑到之前我在看相关资料而看不懂时很恼火,所以在这里我尽最大的可能

【Big Data - Hadoop - MapReduce】通过腾讯shuffle部署对shuffle过程进行详解

摘要: 通过腾讯shuffle部署对shuffle过程进行详解 摘要:腾讯分布式数据仓库基于开源软件Hadoop和Hive进行构建,TDW计算引擎包括两部分:MapReduce和Spark,两者内部都包含了一个重要的过程—Shuffle.本文对Shuffle过程进行解析,并对两个计算引擎的Shuffle过程进行比较. 腾讯分布式数据仓库(Tencent distributed Data Warehouse, 简称TDW)基于开源软件Hadoop和Hive进行构建,并且根据公司数据量大.计算复杂等

【转】mapreduce的shuffle过程

转自http://langyu.iteye.com/blog/992916 Shuffle过程是MapReduce的核心,也被称为奇迹发生的地方.要想理解MapReduce, Shuffle是必须要了解的.我看过很多相关的资料,但每次看完都云里雾里的绕着,很难理清大致的逻辑,反而越搅越混.前段时间在做MapReduce job 性能调优的工作,需要深入代码研究MapReduce的运行机制,这才对Shuffle探了个究竟.考虑到之前我在看相关资料而看不懂时很恼火,所以在这 里我尽最大的可能试着把S

MapReduce shuffle过程剖析及调优

更新记录 2017-07-18 初稿 MapReduce简介 在Hadoop MapReduce中,框架会确保reduce收到的输入数据是根据key排序过的.数据从Mapper输出到Reducer接收,是一个很复杂的过程,框架处理了所有问题,并提供了很多配置项及扩展点.一个MapReduce的大致数据流如下图: 更详细的MapReduce介绍参考Hadoop MapReduce原理与实例. Mapper的输出排序.然后传送到Reducer的过程,称为shuffle.本文详细地解析shuffle过

MapReduce的Shuffle过程介绍

MapReduce的Shuffle过程介绍 Shuffle的本义是洗牌.混洗,把一组有一定规则的数据尽量转换成一组无规则的数据,越随机越好.MapReduce中的Shuffle更像是洗牌的逆过程,把一组无规则的数据尽量转换成一组具有一定规则的数据. 为什么MapReduce计算模型需要Shuffle过程?我们都知道MapReduce计算模型一般包括两个重要的阶段:Map是映射,负责数据的过滤分发:Reduce是规约,负责数据的计算归并.Reduce的数据来源于Map,Map的输出即是Reduce

[转]MapReduce:详解Shuffle过程

Shuffle过程是MapReduce的核心,也被称为奇迹发生的地方.要想理解MapReduce, Shuffle是必须要了解的.我看过很多相关的资料,但每次看完都云里雾里的绕着,很难理清大致的逻辑,反而越搅越混.前段时间在做MapReduce job 性能调优的工作,需要深入代码研究MapReduce的运行机制,这才对Shuffle探了个究竟.考虑到之前我在看相关资料而看不懂时很恼火,所以在这里我尽最大的可能试着把Shuffle说清楚,让每一位想了解它原理的朋友都能有所收获.如果你对这篇文章有