如何避免Hadoop PIG和Hive中的坏记录?

How to avoid bad records in Hadoop PIG and Hive?

嗨,我是 Hadoop 的新手,我发现可以使用 SkipBadRecord class 在 Java map reduce 中跳过任何输入格式的坏记录,所以我只想知道这在 Pig 中是如何实现的和蜂巢?

在 Hive 中,您可以通过利用此 属性

的最佳值来实现

设置mapreduce.map.skip.maxrecords=??

Hive 中的错误记录处理

要在hive中过滤坏记录,您可以在查询中启用跳过模式。跳过模式的配置单元配置为:

SET mapred.skip.mode.enabled = true;

您需要在配置单元查询之前设置上述命令。 您还可以通过提供以下参数来限制配置:

SET mapred.map.max.attempts = 100; 
SET mapred.reduce.max.attempts = 100;
SET mapred.skip.map.max.skip.records = 30000;
SET mapred.skip.attempts.to.start.skipping = 1

有关此内容的更多详细信息,请参阅此 link

Pig 中的错误记录处理

Pig 本身就是为处理不良记录而设计的。 在处理数 GB 或 TB 的数据时,极有可能至少有一行已损坏或会导致意外结果。一个例子是除以零,即使没有记录应该在分母中有零。导致整个作业故障转移一个坏记录是不好的。为了避免这些失败,Pig 插入一个空值,发出警告,然后继续处理。这样,工作仍然完成。警告被汇总并在最后报告为计数。您应该检查警告以确保一些记录的失败在您的工作中是可以接受的。如果您需要了解有关警告的更多详细信息,可以通过在命令行中传递 -w 来关闭聚合。

请查看与猪有关的this有用的link

mapreduce.reduce.maxattempts 已被 mapred.reduce.max.attempts 取代,默认为 4,因此不应设置为看起来很高的 100。

mapred.map.max.attempts 已被 mapreduce.map.maxattempts 取代,默认为 4,因此不应设置为看起来很高的 100。

mapred.skip.attempts.to.start.skipping 已被 mapreduce.task.skip.start.attempts 取代,默认为 2,这似乎已经足够了。

mapred.skip.map.max.skip.records 已替换为 mapreduce.map.skip.maxrecords

mapred.skip.mode.enabled 似乎不再可用,因此可能不需要设置。

因此,唯一可以提供帮助的设置如下所示:

SET mapreduce.map.skip.maxrecords = 30000;