我有一个tarball(access.logs.tar.gz)中的日志文件加载到我的hadoop集群中。我想知道他们的方法是直接把它装到猪身上然后解开吗?
答案 0 :(得分:5)
@ChrisWhite的答案在技术上是正确的,你应该接受他的答案,而不是我的答案(至少IMO)。
您需要使用Hadoop远离tar.gz
个文件。 Gzip文件不可拆分,因此您会遇到如果您的gzip文件很大,您将在您的映射器中看到热点的情况。例如,如果您有一个100 GB的.tar.gz
文件,则无法拆分计算。
另一方面,让我们说它们很小。在这种情况下,Pig会很好地将它们收集在一起,并且分裂问题就会消失。这有一个缺点,现在你正在使用NameNode处理大量的小文件。此外,由于文件很小,因此将文件转换为更合理的格式应该相对便宜。
那么你应该将文件重新格式化为什么格式?好问题!
我认为将某种tarball加载器写入piggybank是完全合理的,但我个人更愿意以不同的方式放置数据。
答案 1 :(得分:4)
PigStorage将识别文件被压缩(通过.gz扩展名,这实际上是在PigTextInputFormat扩展的TextInputFormat中实现的),但之后你将处理tar文件。如果你能够处理tar中文件之间的标题行,那么你可以按原样使用PigStorage,否则你需要编写自己的PigTextInputFormat扩展来处理剥离每个文件之间的tar标题行