5

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

4

2 回答 2

6

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

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

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

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

  • 将它们全部连接成一个大的块级压缩序列文件可能是最具挑战性的,但在性能方面也是最有价值的。
  • 另一种是完全忽略压缩,只是将这些文件分解出来,或者至少将它们连接起来(你确实会看到没有压缩的性能损失)。
  • 最后,您可以将 blob 文件分成大约 100MB 的块,然后 gzip 压缩它们。

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

于 2012-04-19T02:06:32.257 回答
4

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

于 2012-04-17T10:37:29.767 回答