2

我可以看到 pig 可以本机读取 .bz2 文件,但我不确定它是否运行显式作业将 bz2 拆分为多个输入拆分?谁能证实这一点?如果 pig 正在运行一项工作来创建输入拆分,有没有办法避免这种情况?我的意思是一种让 MapReduce 框架将 bz2 文件拆分为框架级别的多个输入的方法?

4

1 回答 1

1

可拆分的输入格式没有在 hadoop(或 pig,它只是为您运行 MR 作业)中实现,这样一个文件被一个作业分割,然后由第二个作业处理分割。

输入格式定义了一种isSplittable方法,该方法原则上定义文件格式是否可以拆分。除此之外,大多数基于文本的格式将检查文件是否使用已知的压缩编解码器(例如:gzip、bzip2)以及编解码器是否支持拆分(gzip 原则上不支持,但 bz2 支持)。

如果输入格式/编解码器确实允许拆分文件,则在压缩文件中定义的(和可配置的)点处定义拆分(例如每 64 MB)。当创建映射任务来处理每个拆分时,然后获取输入格式以创建文件的记录读取器,传递读取器应该从哪里开始的拆分信息(64MB 块偏移量)。然后告诉读者寻找分裂的偏移点。此时,底层编解码器将在压缩文件中寻找该点,并向前扫描,直到找到下一个压缩块头(在 bz2 的情况下)。然后在从编解码器返回的未压缩流上继续正常读取,直到在未压缩流中传递了拆分端点。

于 2013-08-13T00:11:28.007 回答