如何将压缩包加载到猪
Posted
技术标签:
【中文标题】如何将压缩包加载到猪【英文标题】:how to load a tarball to pig 【发布时间】:2012-04-17 04:21:37 【问题描述】:我有一个 tarball (access.logs.tar.gz) 中的日志文件加载到我的 hadoop 集群中。我想知道他们是不是直接把它装到猪身上而不去皮?
【问题讨论】:
【参考方案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 标题行
【讨论】:
以上是关于如何将压缩包加载到猪的主要内容,如果未能解决你的问题,请参考以下文章