我们的工作流程使用AWS弹性地图缩减群集来运行一系列Pig作业,以将大量数据处理为聚合报告。遗憾的是,输入数据可能不一致,并且可能导致没有输入文件或0字节文件被提供给管道,甚至不会被管道的某些阶段生成。
在LOAD语句中,如果找不到任何输入文件或任何输入文件是0字节,Pig就会失败。
有没有什么好方法可以解决这个问题(希望在Pig配置或脚本或Hadoop集群配置中,无需编写自定义加载程序......)?
(由于我们使用AWS弹性贴图减少,我们坚持使用Pig 0.6.0和Hadoop 0.20。)
答案 0 :(得分:1)
(对于后人,我们提出的一个低于标准的解决方案:)
为了处理0字节的问题,我们发现我们可以检测到这种情况,而是插入一个带有一个换行符的文件。这会导致如下消息:
Encountered Warning ACCESSING_NON_EXISTENT_FIELD 13 time(s).
但至少Pig不会因异常而崩溃。
或者,我们可以为该文件生成一个具有适当数量的'\t'
字符的行,这将避免警告,但它会将垃圾插入到我们必须过滤掉的数据中。
这些相同的想法可用于通过创建虚拟文件来解决无输入文件条件,但它具有与上面列出的相同的缺点。
答案 1 :(得分:1)
我一直在使用的方法是从shell运行pig脚本。我有一个工作从六个不同的输入目录中获取数据。所以我为每个输入文件写了一个片段。
shell检查输入文件是否存在,并从片段组装最终的pig脚本。
然后执行最终的猪脚本。我知道这有点像Rube Goldberg的方法,但到目前为止一切都很好。 : - )