如何将tarball加载到猪身上

nas*_*eeg 5 hadoop apache-pig

我有一个tarball(access.logs.tar.gz)中的日志文件加载到我的hadoop集群中.我想知道他们的方法是直接把它装到猪身上然后解开吗?

Don*_*ner 5

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

你需要摆脱tar.gzHadoop的文件.Gzip文件不可拆分,因此您会遇到如果您的gzip文件很大,您将在您的映射器中看到热点的情况.例如,如果您有一个.tar.gz100gb 的文件,则无法拆分计算.

另一方面,让我们说它们很小.在这种情况下,Pig会很好地将它们收集在一起,并且分裂问题就会消失.这有一个缺点,现在你正在使用NameNode处理大量的小文件.此外,由于文件很小,因此将文件重新编码为更合理的格式应该相对便宜.

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

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

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


Chr*_*ite 4

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