为啥我的 avro 输出文件在我的猪工作中如此之小又如此之多?

Posted

技术标签:

【中文标题】为啥我的 avro 输出文件在我的猪工作中如此之小又如此之多?【英文标题】:Why are my avro output files so small and so numerous in my pig job?为什么我的 avro 输出文件在我的猪工作中如此之小又如此之多? 【发布时间】:2014-08-12 02:44:11 【问题描述】:

我正在运行一个猪脚本,该脚本执行一系列连接并使用 AvroStorage() 编写

一切运行良好,我得到了我想要的数据……但它被写入 845 个 avro 文件(每个约 30kb)。这似乎根本不对……但我似乎找不到任何设置,我可能已经更改为从之前的 1 个大型 avro 输出到 845 个小型 avro(添加另一个数据源除外)。

这会改变什么吗?我怎样才能把它恢复到一两个文件?

谢谢!

【问题讨论】:

【参考方案1】:

一种可能是改变你的块大小。如果你想回到更少的文件,你也可以尝试使用 parquet。通过 pig 脚本转换您的 .avro 文件并将其存储为 .parquet 文件,这会将您的 845 文件减少到更少。

但除了性能优势之外,没有必要恢复到更少的文件。

【讨论】:

【参考方案2】:

MR 作业写入的文件数由运行的 reducer 数定义。您可以在 Pig 脚本中使用 PARALLEL 来控制 reducer 的数量。

如果您确定最终数据足够小(与您的块大小相比),您可以将 PARALLEL 1 添加到您的 JOIN 语句中,以确保将 JOIN 转换为 1 个 reducer,从而仅将输出写入 1 个文件中。

【讨论】:

【参考方案3】:

我用SET pig.maxCombinedSplitSize 134217728;解决了这个问题

SET default_parallel 10; 可能仍会输出许多小文件,具体取决于 PIG 作业。

【讨论】:

以上是关于为啥我的 avro 输出文件在我的猪工作中如此之小又如此之多?的主要内容,如果未能解决你的问题,请参考以下文章

为啥字体大小(和其他元素)在移动设备上显得如此之小

为啥 DART 让我的网站变得如此缓慢?

为啥在我的 c 程序中,当我使用 double 时它只输出 0,但是当我使用 float 时它可以工作? [复制]

为啥我的所见即所得编辑器在 vuejs 中运行如此缓慢?

为啥我的 subnav 如此跳跃? (链接在我点击之前消失)

为啥 bind() 在 Vue 模板事件处理程序中的工作方式如此不一致?