hadoop map reduce 中的错误处理

Error handling in hadoop map reduce

根据文档,有几种方法可以在 map reduce 中执行错误处理。以下是少数:

一个。使用枚举的自定义计数器 - 每条失败记录的增量。

b。记录错误并稍后分析。

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

除了这些之外,还有没有其他方法可以在没有人工干预的情况下处理错误场景。欢迎任何工具、参考、最佳实践。

我认为相同的技术适用于任何分布式应用程序,只需稍作改动。

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

  1. 如果数据验证发生错误,作业是否应该停止。大多数大数据用例都可以留下很少的不良记录。但是,如果您的用例希望所有记录都足够好,您应该做出该决定并转到以下步骤。

    有时最好通过跳过不良记录或让作业 运行 同时,使用以下技术解决问题(错误),并在进行过程中进行纠正和修改。

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

    地图任务:mapreduce.map.maxattempts 属性

    对于减速器任务:mapreduce.reduce.maxattempts

    默认为 4

  3. 处理格式错误的数据。

    所以我们决定处理格式错误的数据。然后定义条件或 记录不好。你可以使用计数器,快速给你 不良记录数。

    在映射器中 class,

    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);      
    }
    

    通过上面的方法,所有的记录都得到处理,并根据坏记录添加计数器。您可以在作业结束时、在作业统计之后或通过网络 UI 或从 shell 命令查看计数器值。

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

    一旦知道问题的影响,即坏记录的数量,我们就需要知道 "why is it bad"。为此,我们需要查看日志 并搜索错误消息。

    Yarn 提供日志聚合并将作业 ID 的所有日志组合起来并存储在 hdfs 中。可以使用

    yarn logs -applicationId <application ID>