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

如何避免Hadoop PIG和Hive中的不良记录?,hadoop,hive,apache-pig,Hadoop,Hive,Apache Pig,您好,我是Hadoop新手,我发现任何输入格式的不良记录都可以在Java map reduce中使用SkipPadRecord类跳过,所以我只想知道如何在Pig和Hive中实现这一点?在Hive中,您可以通过利用此属性的最佳值来实现 在配置单元中设置mapreduce.map.skip.maxrecords=??,您可以通过利用此属性的最佳值来实现 设置mapreduce.map.skip.maxrecords=??配置单元中的坏记录处理 要过滤配置单元中的坏记录,可以在查询中启用跳过模式。跳过

您好,我是Hadoop新手,我发现任何输入格式的不良记录都可以在Java map reduce中使用SkipPadRecord类跳过,所以我只想知道如何在Pig和Hive中实现这一点?

在Hive中,您可以通过利用此属性的最佳值来实现


在配置单元中设置mapreduce.map.skip.maxrecords=??

,您可以通过利用此属性的最佳值来实现


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

配置单元中的坏记录处理

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

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
有关这方面的更多详细信息,请参阅


清管器不良记录处理

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


请查看与pig相关的有用链接

在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
有关这方面的更多详细信息,请参阅


清管器不良记录处理

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


请查看与pig相关的有用链接

mapreduce.reduce.maxattempts
已替换为
mapreduce.max.attempts
,默认值为4,因此不应设置为似乎很高的100

mapred.map.max.attempts
已被
mapreduce.map.maxtempts
替换,默认为4,因此不应设置为100,这似乎很高

mapred.skip.attempts.to.start.skip
已替换为
mapreduce.task.skip.start.attempts
并默认为2,这似乎已经足够了

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

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

因此,唯一有帮助的设置如下所示:


设置mapreduce.map.skip.maxrecords=30000

mapreduce.reduce.maxattempts
已被
mapred.reduce.max.attempts
替换,默认为4,因此不应设置为100,这似乎很高

mapred.map.max.attempts
已被
mapreduce.map.maxtempts
替换,默认为4,因此不应设置为100,这似乎很高

mapred.skip.attempts.to.start.skip
已替换为
mapreduce.task.skip.start.attempts
并默认为2,这似乎已经足够了

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

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

因此,唯一有帮助的设置如下所示:


设置mapreduce.map.skip.maxrecords=30000

在从一个配置单元表插入数据到另一个表时,我仍然遇到问题。我正在尝试使用以下查询将数据(超过3亿行)从配置单元表复制到Elasticsearch:-插入覆盖表表表名选择*自配置单元表名;&在插入一些行之后,我得到了这个异常。我知道这是因为ES中映射的数据类型不同。。。我想跳过插入那些给出错误的行,不仅此异常可能是其他异常。在从一个配置单元表插入数据到另一个表时,我仍然遇到问题。我正在尝试使用以下查询将数据(超过3亿行)从配置单元表复制到Elasticsearch:-插入覆盖表表表名选择*自配置单元表名;&在插入一些行之后,我得到了这个异常。我知道这是因为ES中映射的数据类型不同。。。我想跳过插入那些给出错误的行,不仅此异常可能是其他异常。感谢提供此属性名称。似乎
mapred.skip.map.max.skip.records
已被弃用。感谢您提供此属性名称。似乎
mapred.skip.map.max.skip.records
已被弃用。