美文网首页
MR任务块丢失导致任务失败的问题处理

MR任务块丢失导致任务失败的问题处理

作者: 春风花草 | 来源:发表于2019-03-22 16:13 被阅读0次

    问题描述

    发现一个正常运行的hive任务突然失败了,如下图:


    image.png

    主要是由于map有任务失败导致整个MR失败了,查看map的log,发现:

    java.io.IOException: org.apache.hadoop.hdfs.BlockMissingException: Could not obtain block: BP-1032241758-10.196.145.165-1488796558087:blk_5010798078_3937163083 
    file=/user/xxx/warehouse/xxx.db/xxx/attempt_1470375164689_38810454_r_000107_0.1472337270529 
    

    从上面报错信息可知是由于hdfs丢块导致map的IO异常,最终导致整个任务失败。

    问题处理

    一般来说hdfs的数据都会有多备份,是比较少出现丢块问题的,出现丢块一般有下面两种情况:

    1. 如果同时有好几台机器出现故障,而刚好这个块及其备份数据又都在这几台机器上
    2. 数据块刚生成好,还没来得及复制备份,刚好所在的机器出现了故障

    针对hdfs丢块问题,主要有两种解决思路:

    1. 尽快恢复机器,解决丢块问题,使MR任务可以正常运行。
    2. 如果MR的计算的数据量很大,而丢失的块的数据占比又很小且对MR的统计结果影响很小,在这种情况下,我们可以在MR任务中放弃丢失块的数据(在大数据的统计中,我们通常只需要有一个准确的结果,而不需要一个精确的值,比如给决策人员算一个日登录人数,可能他只需要一个精确到万的数就可以了,而不是一定要一个精确到个位的数)
      如果是这种情况,可能通过调mapreduce参数还控制允许map失败个数的百分比来规避丢块的问题
    set mapreduce.map.failures.maxpercent=5
    

    上面参数设置了map阶段允许失败5%的map,MR任务可以正常执行。

    相关文章

      网友评论

          本文标题:MR任务块丢失导致任务失败的问题处理

          本文链接:https://www.haomeiwen.com/subject/ybxhvqtx.html