我们的工作流使用AWS弹性地图缩减群集来运行一系列Pig作业,以将大量数据处理为聚合报告.遗憾的是,输入数据可能不一致,并且可能导致没有输入文件或0字节文件被提供给管道或甚至由管道的某些阶段产生.
在LOAD语句期间,如果找不到任何输入文件或者任何输入文件是0字节,则Pig会失败.
有没有什么好方法可以解决这个问题(希望在Pig配置或脚本或Hadoop集群配置中,无需编写自定义加载程序......)?
(由于我们使用AWS弹性贴图减少,我们坚持使用Pig 0.6.0和Hadoop 0.20.)
(对于后代,我们提出了一个低于标准的解决方案:)
为了处理 0 字节问题,我们发现我们可以检测这种情况并插入带有单个换行符的文件。这会导致类似以下的消息:
Encountered Warning ACCESSING_NON_EXISTENT_FIELD 13 time(s).
Run Code Online (Sandbox Code Playgroud)
但至少 Pig 不会因异常而崩溃。
或者,我们可以为该文件生成一行具有适当数量的'\t'字符,这将避免警告,但它会在数据中插入垃圾,然后我们必须过滤掉这些垃圾。
这些相同的想法可用于通过创建虚拟文件来解决无输入文件的情况,但它具有与上面列出的相同的缺点。