【问题标题】:Apache Pig handles bz2 file natively?Apache Pig 本地处理 bz2 文件?
【发布时间】:2013-08-12 18:43:11
【问题描述】:

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

【问题讨论】:

  • 问题是 pig 是否运行作业来预先拆分文件,然后在拆分文件上运行作业?
  • 是的。感谢您要求澄清。我猜可能这取决于底层的 Hadoop?

标签: hadoop mapreduce apache-pig


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    相关资源
    最近更新 更多