如何将tarball加载到猪身上

时间:2012-04-17 04:21:37

标签: hadoop apache-pig

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

2 个答案:

答案 0 :(得分:5)

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

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

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

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

  • 只需将它们连接成一个大的块级压缩 序列文件可能是最具挑战性但最有价值的 绩效条款。
  • 另一种是忽略压缩 完全只是爆炸这些文件,或至少连接 他们(你确实看到没有压缩的性能命中)。
  • 最后,您可以将文件blob到~100MB块中,然后再压缩它们。

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

答案 1 :(得分:4)

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