hadoop map reduce中的错误处理



根据文档,有几种方法可以说明在mapreduce中如何执行错误处理。以下是一些:

。对每个失败记录使用enum - increment自定义计数器。

b。记录错误,以后再分析。

计数器给出失败记录的数量。然而,要获得失败记录的标识符(可能是它的唯一键),以及发生异常的详细信息,发生错误的节点-我们需要执行集中的日志分析,并且有许多节点正在运行。Logstash是可用的。

除了这些,有没有其他的方法来处理错误场景,而不需要人工干预。欢迎使用任何工具、参考资料和最佳实践。

我认为同样的技术适用于任何分布式应用程序,只需要做一些微小的改变。

使用错误处理时需要问的几个问题:

  1. 如果在数据验证中发生错误,是否应该停止作业。大多数大数据用例可能不会留下什么不良记录。但是,如果您的用例希望所有的记录都足够好,那么您应该做出这个决定,然后继续执行下面的步骤。

    有时候,通过跳过坏记录或同时,使用下面的技术找出问题(错误),并在前进的过程中进行纠正和修改。

  2. 您希望发生错误,但仅限时间。那么,在整个作业停止之前,可以抛出多少次异常,如下所示

    Map任务:mapreduce.map。财产maxattempts

    对于reducer任务:mapreduce.reduce.maxattempts

    默认为4

  3. 处理畸形数据

    所以我们决定处理畸形数据。然后定义条件或记录很糟糕。你可以用计数器,快速给你坏记录的数量。

    在Mapper类中

    enum Temperature { OVER_10 }
    

    内部映射方法,

    //解析记录

    if(value > 10) {
        System.err.println("Temperature over 100 degrees for input: " + value);
        context.setStatus("Detected possibly corrupt record: see logs.");
        context.getCounter(Temperature.OVER_10).increment(1);      
    }
    

    使用上述方法,将处理所有记录,并根据坏记录添加计数器。您可以在作业结束时,在作业统计之后,通过web UI或从shell命令查看计数器值。

    $mapred job -counter <job_id> '${fully_qualified_class_name}' ${enum_name}
    $mapred job -counter job_1444655904448_17959 'com.YourMapper$Temperature' OVER_10
    

    一旦你知道问题的影响,即坏记录的数量,我们需要知道"为什么它是坏的"。为此,我们需要查看日志并搜索错误信息。

    Yarn提供日志聚合功能,并将作业id的所有日志组合在一起并存储在hdfs中。可以使用

    yarn logs -applicationId <application ID>
    

相关内容

  • 没有找到相关文章