为啥大象鸟猪 JsonLoader 只处理我的文件的一部分?

Posted

技术标签:

【中文标题】为啥大象鸟猪 JsonLoader 只处理我的文件的一部分?【英文标题】:Why is the elephantbird Pig JsonLoader only processing part of my file?为什么大象鸟猪 JsonLoader 只处理我的文件的一部分? 【发布时间】:2011-04-28 20:33:15 【问题描述】:

我在 Amazon 的 Elastic Map-Reduce 上使用 Pig 进行批量分析。我的输入文件位于 S3 上,并且包含由每行一个 JSON 字典表示的事件。我使用大象鸟 JsonLoader 库来解析输入文件。到目前为止一切顺利。

我在处理存储在本地文件系统或交互式 Pig 会话中的 hdfs 上的大文件时遇到了问题。看起来如果输入文件足够大以进行拆分,大象鸟只处理过一个拆分,并且在拆分结束时处理停止并且没有错误消息。如果我从 S3 流式传输输入(在 S3 输入上没有文件拆分),或者如果我将文件转换为 Pig 直接可读的格式,我不会遇到同样的问题。

举个具体的例子:一个有 833,138 行的文件最多只能处理 379,751 行(如果我在 Pig 中观察完成百分比,它会平稳地上升到 50%,然后跳到 100%)。我还尝试了一个包含 400,000 行的文件,并且处理得很好。

所以我的问题是:为什么大象鸟只处理一个拆分?我是误解了 Pig 在交互模式下应该如何工作还是发生了什么大错特错?

【问题讨论】:

我的商务同事听到 eng 团队讨论这个 bug 后很快就明白了 :) 我讨厌猪本地模式。它与我不使用的 hadoop 模式不一致且完全不同。这使得调试猪成为一个 PITA。 @Spike:你的意思是 pig -x local?我用 -x local 和 not 都遇到了这个问题。 【参考方案1】:

Katia,如果您向 Pig 用户列表发送电子邮件,您会更快地获得帮助 :)。

请尝试 Pig 0.8.1(当前版本),如果您仍然遇到错误,请告诉我们。值得一提的是,我已经使用 EB Json 加载器一年多来处理数百个 gig 文件,它们处理得很好,所以也许你的数据有些问题。

Spike Gronim - 已修复,本地模式现在与非本地模式基本相同(分布式缓存和倾斜连接除外)。升级。

【讨论】:

以上是关于为啥大象鸟猪 JsonLoader 只处理我的文件的一部分?的主要内容,如果未能解决你的问题,请参考以下文章

我如何使用 jsonloader 为数组定义模式?

使用 Elephant-bird-pig 中的 JsonLoader 时出错

当未设置可选字段时,大象鸟库生成字段的默认值而不是 null

使用JSONLoader在threejs上导入3d对象

如何在使用three.js和jsonLoader时制作加载屏幕?

猪 JsonLoader() 错误?