hadoop map reduce 中的错误处理
Error handling in hadoop map reduce
根据文档,有几种方法可以在 map reduce 中执行错误处理。以下是少数:
一个。使用枚举的自定义计数器 - 每条失败记录的增量。
b。记录错误并稍后分析。
计数器给出失败记录的数量。但是要获取失败记录的标识符(可能是它的唯一键),以及发生异常的详细信息,发生错误的节点 - 我们需要进行集中的日志分析,并且有很多节点运行。 Logstash 在其上可用。
除了这些之外,还有没有其他方法可以在没有人工干预的情况下处理错误场景。欢迎任何工具、参考、最佳实践。
我认为相同的技术适用于任何分布式应用程序,只需稍作改动。
处理错误时要问的几个问题:
如果数据验证发生错误,作业是否应该停止。大多数大数据用例都可以留下很少的不良记录。但是,如果您的用例希望所有记录都足够好,您应该做出该决定并转到以下步骤。
有时最好通过跳过不良记录或让作业 运行
同时,使用以下技术解决问题(错误),并在进行过程中进行纠正和修改。
您希望错误发生,但仅限于有限的次数。那么在整个作业停止之前可以抛出多少次异常如下
地图任务:mapreduce.map.maxattempts 属性
对于减速器任务:mapreduce.reduce.maxattempts
默认为 4
处理格式错误的数据。
所以我们决定处理格式错误的数据。然后定义条件或
记录不好。你可以使用计数器,快速给你
不良记录数。
在映射器中 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>
根据文档,有几种方法可以在 map reduce 中执行错误处理。以下是少数:
一个。使用枚举的自定义计数器 - 每条失败记录的增量。
b。记录错误并稍后分析。
计数器给出失败记录的数量。但是要获取失败记录的标识符(可能是它的唯一键),以及发生异常的详细信息,发生错误的节点 - 我们需要进行集中的日志分析,并且有很多节点运行。 Logstash 在其上可用。
除了这些之外,还有没有其他方法可以在没有人工干预的情况下处理错误场景。欢迎任何工具、参考、最佳实践。
我认为相同的技术适用于任何分布式应用程序,只需稍作改动。
处理错误时要问的几个问题:
如果数据验证发生错误,作业是否应该停止。大多数大数据用例都可以留下很少的不良记录。但是,如果您的用例希望所有记录都足够好,您应该做出该决定并转到以下步骤。
有时最好通过跳过不良记录或让作业 运行 同时,使用以下技术解决问题(错误),并在进行过程中进行纠正和修改。
您希望错误发生,但仅限于有限的次数。那么在整个作业停止之前可以抛出多少次异常如下
地图任务:mapreduce.map.maxattempts 属性
对于减速器任务:mapreduce.reduce.maxattempts
默认为 4
处理格式错误的数据。
所以我们决定处理格式错误的数据。然后定义条件或 记录不好。你可以使用计数器,快速给你 不良记录数。
在映射器中 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>