【问题标题】:how to load a tarball to pig如何将压缩包加载到猪
【发布时间】:2012-04-17 04:21:37
【问题描述】:

我有一个 tarball (access.logs.tar.gz) 中的日志文件加载到我的 hadoop 集群中。我想知道他们是不是直接把它装到猪身上而不去皮?

【问题讨论】:

    标签: hadoop apache-pig


    【解决方案1】:

    @ChrisWhite 的回答在技术上是正确的,您应该接受他的回答而不是我的回答(至少在 IMO)。

    您需要使用 Hadoop 远离 tar.gz 文件。 Gzip 文件是不可拆分的,因此如果您的 gzip 文件很大,您将在映射器中看到热点。例如,如果您有一个 100gb 的 .tar.gz 文件,您将无法拆分计算。

    另一方面,假设它们很小。在这种情况下,Pig 会很好地将它们收集在一起,分裂问题就会消失。这有一个缺点,即现在您正在使用 NameNode 处理大量小文件。此外,由于文件很小,因此将文件改造成更合理的格式在计算上应该相对便宜。

    那么您应该将文件重新格式化为什么格式?好问题!

    • 只需将它们全部连接成一个大块级压缩 序列文件可能是最具挑战性但最有价值的 性能条款。
    • 另一个是忽略压缩 完全并且只是将这些文件分解出来,或者至少连接起来 它们(您确实会看到没有压缩的性能下降)。
    • 最后,您可以将 blob 文件分成大约 100MB 的块,然后对它们进行 gzip。

    我认为将某种 tarball 加载程序写入 piggybank 是完全合理的,但我个人更愿意以不同的方式布置数据。

    【讨论】:

      【解决方案2】:

      PigStorage 将识别文件已压缩(通过 .gz 扩展名,这实际上是在 PigTextInputFormat 扩展的 TextInputFormat 中实现的),但之后您将处理一个 tar 文件。如果您能够处理 tar 中文件之间的标题行,那么您可以按原样使用 PigStorage,否则您需要编写自己的 PigTextInputFormat 扩展来处理剥离每个文件之间的 tar 标题行

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-27
        • 1970-01-01
        • 2019-12-04
        相关资源
        最近更新 更多