首页 > Hadoop > Hadoop 中的错误处理机制。
2014
04-15

Hadoop 中的错误处理机制。

本篇文章只是简单的介绍hadoop中的错误处理机制,比如jobtracker故障,任务错误,然后hadoop会怎么处理这类错误,并不会通过详细的错误日志来分析错误的源头:

在说这几个机制之前,我们先来看一下hadoop的几个分支:目前主要分为3个,对应的版本分别是1.x.x,0.23.x和2.x.x,其中1.x.x属于hadoop 1.0,只有hdfs和mapreduce,且mapreduce是一个两阶段离线计算框架,不支持多种计算框架,hdfs也存在单点故障问题和内存受限制集群扩展问题。0.23.x和2.x.x属于hadoop 2.0,在0.23.x中增加了hdfs federation,yarn等,而且mapreduce运行在yarn上,2.x.x在0.23.x基础上还增加了HA(High Availability),这里就解决了之前namenode单节点故障的问题。

1. namenode和jobtracker故障:由于都是单节点,不过在hadoop 2.0中,有了hdfs federation和hdfs HA的支持,可以支持多个namenode,平摊压力,hdfs HA同时也提供了三中解放方案来解决namenode单节点的故障处理。

2. tasktracker故障:tasktracker和jobtracker之间通过心跳来通信,通常周期是一分钟,tasktracker会发送一次信息到jobtracker,jobtracker通过这个信息了解tasktracker是否发生故障,负载情况等,如果jobtracker发现某个tasktracker发生故障,jobtracker将从任务节点列表中把故障的tasktracker移除。如果这个故障的tasktracker尚有map任务还没有完成,那jobtracker会通知其他节点重新执行此map任务,如果尚有reduce任务还没有完成,jobtracker会通知其他节点继续执行尚未完成的reduce任务。这里需要注意的是,对于map任务是重新执行,这是因为map的输出是暂放buffer中的,如果发生故障,这部分buffer中的数据还未写入到磁盘,而reduce的输出结果会写入到HDFS中,节点发生故障后,只需要继续执行reduce任务就可以了。

3. 如果由于应用程序导致mapreduce任务失败次数超过4次,任务会停止,且整个作业也会失败,这个默认失败次数由mapred.map.attempts和mapred.reduce.max.attempts分别控制map和reduce失败重试次数。

4. JVM无故退出,JAVA程序需要运行在JVM虚拟机中,如果JVM关闭,那mapreduce程序也会终止,这时tasktracker监听程序发生任务进程退出或者没有更新信息返回,会将任务标记为失败,失败的任务会通过心跳告知jobtracker来重新分配任务,任务失败次数不超过默认值4次,请看第3点。

目前还有很多第三方工具来监控hadoop,这个在后面再介绍吧。

最后编辑:
作者:Jerry
一个积极向上的小青年,热衷于分享--Focus on DB,BI,ETL