Hadoop 在ApachePig中如何处理空的或丢失的输入文件?

Hadoop 在ApachePig中如何处理空的或丢失的输入文件?,hadoop,apache-pig,Hadoop,Apache Pig,我们的工作流使用AWS elastic map reduce集群运行一系列清管器作业,将大量数据处理成聚合报告。不幸的是,输入数据可能不一致,并且可能导致没有输入文件或0字节文件被提供给管道,或者甚至由管道的某些阶段生成 在LOAD语句期间,如果Pig找不到任何输入文件或任何输入文件为0字节,则Pig将异常失败 有没有什么好方法可以解决这个问题(希望是在Pig配置或脚本或Hadoop集群配置中,而无需编写自定义加载程序…) (因为我们使用的是AWS elastic map reduce,所以我们

我们的工作流使用AWS elastic map reduce集群运行一系列清管器作业,将大量数据处理成聚合报告。不幸的是,输入数据可能不一致,并且可能导致没有输入文件或0字节文件被提供给管道,或者甚至由管道的某些阶段生成

在LOAD语句期间,如果Pig找不到任何输入文件或任何输入文件为0字节,则Pig将异常失败

有没有什么好方法可以解决这个问题(希望是在Pig配置或脚本或Hadoop集群配置中,而无需编写自定义加载程序…)

(因为我们使用的是AWS elastic map reduce,所以我们只能使用Pig 0.6.0和Hadoop 0.20。)

(对于子孙后代,我们提出了一个低于标准的解决方案:)

为了解决0字节的问题,我们发现我们可以检测到这种情况,而不是插入一个带有单个换行符的文件。这会产生如下消息:

Encountered Warning ACCESSING_NON_EXISTENT_FIELD 13 time(s).
但至少Pig没有例外崩溃

或者,我们可以为该文件生成一行适当数量的
'\t'
字符,这样可以避免警告,但它会将垃圾插入到数据中,然后我们必须过滤掉这些垃圾


这些相同的想法可以通过创建一个虚拟文件来解决无输入文件的问题,但它也有上面列出的缺点。

我一直使用的方法是从shell运行pig脚本。我有一个任务,从六个不同的输入目录获取数据。因此,我为每个输入文件编写了一个片段

shell检查输入文件是否存在,并从片段中汇编最终的pig脚本


然后执行最后一个pig脚本。我知道这有点像鲁比·戈德堡的方法,但到目前为止还不错。:-)

因为这样的问题,我停止使用Pig。在0.6.0中编写自定义加载程序几乎是不可能的(他们在0.8.0中改进了加载程序API)。考虑使用蜂箱。