我有一个压缩包 (access.logs.tar.gz) 中的日志文件加载到我的 hadoop 集群中。我想知道他们是否可以直接将它加载到 pig 身上而不用解开它?
最佳答案
@ChrisWhite 的回答在技术上是正确的,您应该接受他的回答而不是我的(至少是 IMO)。
您需要使用 Hadoop 摆脱 tar.gz
文件。 Gzip 文件不可拆分,因此如果您的 gzip 文件很大,您将在映射器中看到热点。例如,如果您有一个 100gb 的 .tar.gz
文件,您将无法拆分计算。
另一方面,假设它们很小。在这种情况下,Pig 会很好地将它们收集在一起,拆分问题就会消失。这有一个缺点,即现在您正在使用 NameNode 处理大量的小文件。此外,由于文件很小,将文件重组为更合理的格式在计算上应该相对便宜。
那么您应该将文件重新格式化为什么格式?好问题!
- 只是将它们全部连接成一个大的 block 级压缩 序列文件可能是最具挑战性但最有值(value)的 绩效条款。
- 另一种是忽略压缩 完全分解这些文件,或者至少连接起来 他们(您确实会看到没有压缩的性能下降)。
- 最后,您可以将文件 blob 分成大约 100MB 的 block ,然后将它们 gzip。
我认为将某种 tarball 加载程序写入 piggybank 是完全合理的,但我个人更愿意以不同的方式放置数据。
关于hadoop - 如何将 tarball 加载到 pig,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10185007/