我在 Amazon 的 Elastic Map-Reduce 上使用 Pig 进行批量分析。我的输入文件位于 S3 上,并且包含由每行一个 JSON 字典表示的事件。我使用大象鸟 JsonLoader 库来解析输入文件。到目前为止,一切都很好。
在交互式 Pig 会话中处理存储在本地文件系统或 hdfs 上的大文件时,我遇到了问题。看起来如果输入文件大到可以拆分,大象鸟只处理过一个拆分,并且在拆分结束时处理停止并且没有错误消息。如果我从 S3 流式传输输入(在 S3 输入上没有文件拆分),或者我将文件转换为 Pig 可以直接读取的格式,我不会遇到同样的问题。
举一个具体的例子:一个有 833,138 行的文件最多只能处理 379,751 行(如果我在 Pig 中观察完成百分比,它会平稳地上升到 50%,然后跳到 100%)。我还尝试了一个包含 400,000 行的文件,并且处理得很好。
所以我的问题是:为什么大象鸟只处理一个拆分?我是否误解了交互模式下的 Pig 应该如何工作,或者发生了什么大错特错?