hadoopMapreduce中的错误处理

p8h8hvxi  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(466)

根据文档,有几种方法,如何在map reduce中执行错误处理。以下是一些:
答。为每个失败的记录使用enum-increment的自定义计数器。
b。记录错误并稍后分析。
计数器给出失败记录的数目。但是,要获取失败记录的标识符(可能是它的唯一键)和发生异常的详细信息,以及发生错误的节点—我们需要执行集中的日志分析,并且有许多节点正在运行。logstash是可用的。
除此之外,还有没有其他方法来处理错误场景,而无需手动干预。欢迎使用任何工具、参考资料和最佳实践。
我认为同样的技术也适用于任何分布式应用程序,只是做了一些小改动。

jslywgbw

jslywgbw1#

在处理错误时,需要问几个问题:
如果数据验证中发生错误,是否应停止作业。大多数大数据用例都可以留下一些不良记录。但是如果你的用例想要所有的记录都足够好,你应该做出这个决定并进入下面的步骤。
有时,最好让作业通过跳过坏记录来运行,或者同时使用以下技术获取问题(错误),并在继续进行时进行纠正和修改。
您希望错误发生,但只发生有限的次数。那么在整个作业停止之前,可以抛出多少次异常,如下所示
对于Map任务:mapreduce.map.maxattempts属性
对于reducer任务:mapreduce.reduce.maxattempts
默认值为4
处理格式错误的数据。
所以我们决定处理格式错误的数据。然后定义坏记录的条件。你可以用计数器,快速给你不良记录的数量。
在mapper类中,

enum Temperature { OVER_10 }

内部Map方法,
//解析记录

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>

相关问题